ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCA2ZWZkZGQwLi5kMmQ1MzI0IDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0xLDEyNzYgKzEsNTUzNiBAQAotY29tbWl0IDE5NTRiZTZlOWM5NDIxYjQ1ZDBhOWQwNWIxMDM1NmFjYzc1NjMxNTAKLUF1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAcG9sbHV4LmRlbnguZGU+Ci1EYXRlOglTdW4gT2N0IDI5IDAxOjAzOjUxIDIwMDYgKzAyMDAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgc2luY2UgVS1Cb290IDEuMS40OgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIENGR19OQU5EX1FVSUVUX1RFU1QgYWRkZWQgdG8gbm90IHdhcm4gdXBvbiBtaXNzaW5nIE5BTkQgZGV2aWNlCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgT2N0IDIwMDYKKworKiBVcGRhdGUgQUxQUiBjb2RlIChOQU5EIHN1cHBvcnQgd29ya2luZyBub3cpCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgT2N0IDIwMDYKKworKiBSZW1vdmUgY29tcGlsZSB3YXJuaW5ncyBpbiBmcGdhIGNvZGUKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBPY3QgMjAwNgorCisqIEFkZCBDT05GSUdfQk9BUkRfUkVTRVQgdG8gY29uZmlndXJlIGJvYXJkIHNwZWNpZmljIHJlc2V0IGZ1bmN0aW9uCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgT2N0IDIwMDYKKworKiBSZW1vdmUgY29tcGlsZSB3YXJuaW5ncyBpbiBmcGdhIGNvZGUKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBTZXAgMjAwNgorCisqIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIHRoZSBBTFBSIGJvYXJkIGZyb20gUHJvZHJpdmUKKyAgTkFORCBuZWVkcyBzb21lIGFkZGl0aW9uYWwgdGVzdGluZworICBQYXRjaCBieSBIZWlrbyBTY2hvY2hlciwgMTUgQXVnIDIwMDYKKworKiBBZGQgRlBHQSBBbHRlcmEgQ3ljbG9uZSAyIHN1cHBvcnQKKyAgUGF0Y2ggYnkgSGVpa28gU2Nob2NoZXIsIDE1IEF1ZyAyMDA2CisKKyogRGlzYWJsZSBhdXRvYm9vdCBhYm9ydCBmb3IgRk8zMDAgd2hlbiBzaWxlbnQgbW9kZSBpcyBlbmFibGVkCisgIChhY2NvcmRpbmcgdG8gUzEgc3dpdGNoIHNldHRpbmcpLgorCisqIENsZWFudXAgZXhhbXBsZXMgYmluYXJpZXMKKworKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyBSYWluaWVyIFBQWDQ0MEdSeCBldmFsIGJvYXJkCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgU2VwIDIwMDYKKworKiBBZGQgTkFORCBlbnZpcm9ubWVudCBzdXBwb3J0IGZvciBQUEM0NDBFUHggU2VxdW9pYSBOQU5EIGJvb3QgY29uZmlnCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTIgU2VwIDIwMDYKKworKiBVcGRhdGUgTkFORCBib290IGRvY3VtZW50YXRpb24KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMiBTZXAgMjAwNgorCisqIEZpeCBhbGlnbm1lbnQgcHJvYmxlbSBpbiAibXRkcGFydHMiIGNvbW1hbmQKKworKiBBZGQgZG9jdW1lbnRhdGlvbiBvbiB0aGUgbGF0ZXN0IGJ1aWxkIGVudmlyb25tZW50IGV4dGVuc2lvbnMgdG8KKyAgdGhlIFJFQURNRSBmaWxlLgorCisqIFJlbW92ZSBkZWFkIGNvZGUgKGkybyBhbmQgZG1hKSBmcm9tIGNwdS9tcGM4MjR4L2RyaXZlcnMvIGRpcmVjdG9yeS4KKworKiBGaXggTE9HX0RJUiBkaXJlY3RvcnkgY3JlYXRpb24gZXJyb3IuCisgIEFkZCBzdXBwb3J0IGZvciBhdXRvbWF0aWMgY3JlYXRpb24gb2YgQlVJTERfRElSIGRpcmVjdG9yeS4KKworKiBGaXggYnVpbGQgcHJvYmxlbSBjcHUvcHBjNHh4L25kZmMuYworICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IFNlcCAyMDA2CisKKyogRml4IGJ1aWxkIHByb2JsZW0gd2l0aCBDUENJNDQwCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgU2VwIDIwMDYKKworKiBDaGFuZ2UgWWVsbG93c3RvbmUgdG8gdXNlIENGSSB3cml0ZSBidWZmZXIKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBTZXAgMjAwNgorCisqIEFkZCBzdXBwb3J0IGZvciBBTUNDIFNlcXVvaWEgUFBDNDQwRVB4IGV2YWwgYm9hcmQKKyAgLSBBZGQgc3VwcG9ydCBmb3IgUFBDNDQwRVB4ICYgUFBDNDQwR1J4CisgIC0gQWRkIHN1cHBvcnQgZm9yIFBQQzQ0MEVQKHgpL0dSKHgpIE5BTkQgY29udHJvbGxlcgorICAgIGluIGNwdS9wcGM0eHggZGlyZWN0b3J5CisgIC0gQWRkIE5BTkQgYm9vdCBmdW5jdGlvbmFsaXR5IGZvciBTZXF1b2lhIGJvYXJkLAorICAgIHBsZWFzZSBzZWUgZG9jL1JFQURNRS5uYW5kLWJvb3QtcHBjNDQwIGZvciBkZXRhaWxzCisgIC0gVGhpcyBTZXF1b2lhIE5BTkQgaW1hZ2UgZG9lc24ndCBzdXBwb3J0IGVudmlyb25tZW50CisgICAgaW4gTkFORCBmb3Igbm93LiBUaGlzIHdpbGwgYmUgYWRkZWQgaW4gYSBzaG9ydCB3aGlsZS4KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBTZXAgMjAwNgorCisqIEZpeCBta2ltYWdlIC1sIGJ1ZyB3aXRoIG11bHRpZmlsZSBpbWFnZXMgb24gNjRiaXQgcGxhdGZvcm1zCisgIFBhdGNoIGJ5IERhdmlkIFVwZGVncmFmZiwgMDYgU2VwIDIwMDYKKworKiBGaXggYnVpbGQgcHJvYmxlbXMgb24gc29yY2VyeSBib2FyZC4KKworKiBGaXggY29sZGZpcmUgYnVpbGQgcHJvYmxlbXMuCisgIFBhdGNoIGJ5IE1hcmlhbiBCYWxha293aWN6LCAwMSBTZXAgMjAwNgorCisqIEFkZCBzdXBwb3J0IGZvciBhIHNhdmluZyBidWlsZCBvYmplY3RzIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5LgorICBNb2RpZmljYXRpb25zIGFyZSBiYXNlZCBvbiB0aGUgTGludXgga2VybmVsIGFwcHJvYWNoIGFuZCBzdXBwb3J0CisgIHR3byB1c2UgY2FzZXM6CisgIDEpIEFkZCBPPSB0byB0aGUgbWFrZSBjb21tYW5kIGxpbmUgJ21ha2UgTz0vdG1wL2J1aWxkIGFsbCcKKyAgMikgU2V0IGVudmlyb25lbWVudCB2YXJpYWJsZSBCVUlMRF9ESVIgdG8gcG9pbnQgdG8gdGhlIGRlc2lyZWQgbG9jYXRpb24KKwknZXhwb3J0IEJVSUxEX0RJUj0vdG1wL2J1aWxkJworCSdtYWtlJworICBUaGUgc2Vjb25kIGFwcHJvYWNoIGNhbiBhbHNvIGJlIHVzZWQgd2l0aCBhIE1BS0VBTEwgc2NyaXB0CisJJ2V4cG9ydCBCVUlMRF9ESVI9L3RtcC9idWlsZCcKKwknLi9NQUtFQUxMJworICBDb21tYW5kIGxpbmUgJ089JyBzZXR0aW5nIG92ZXJyaWRlcyB0aGUgQlVJTERfRElSIGVudmlyb25lbnQgdmFyaWFibGUuCisgIFdoZW4gbm9uZSBvZiB0aGUgYWJvdmUgbWV0aG9kcyBpcyB1c2VkIHRoZSBsb2NhbCBidWlsZCBpcyBwZXJmb3JtZWQKKyAgYW5kIHRoZSBvYmplY3QgZmlsZXMgYXJlIHBsYWNlZCBpbiB0aGUgc291cmNlIGRpcmVjdG9yeS4KKworKiBSZW1vdmUgdGhlIGJvYXJkL25ldHN0YXIvY3JjaXQgYmluYXJ5IGZyb20gZ2l0IHJlcG9zaXRvcnkuCisKKyogRml4IHRvb2xzL3VwZGF0ZXIgYnVpbGQgZXJyb3IuCisKKyogRml4IHRvb2xzL2Vhc3lsb2dvIGJ1aWxkIGVycm9yLgorCisqIEZpeGVkIHByb2JsZW1zIG9uIFBSUzIwMCBib2FyZCBjYXVzZWQgYnkgYWRkaW5nIHNwbGFzaCBzY3JlZW4gb24gTUNDMjAwCisKKyogRXh0ZW5kZWQgUkVBRE1FIGVudHJ5IG9uIGNvZGluZyBzdHlsZQorCisqIEFkZGVkIGFub3RoZXIgZXhhbXBsZSBzaG93aW5nIHNpbXBsZSBpbnRlcnJ1cHQgaW50ZXJjZXB0aW9uLgorCisqIEFkZGVkIHNpbXBsZV9zdHJ0b3VsKCksIGdldGVudigpIGFuZCBzZXRlbnYoKSB0byB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zLgorICBBbHNvIGJ1bXBlZCB1cCBBQkkgdmVyc2lvbiB0byByZWZsZWN0IHRoaXMgY2hhbmdlLgorCisqIEFkZGVkIGludGVycnVwdCBoYW5kbGluZyBjYXBhYmlsaXRpZXMgZm9yIG1wYzV4eHggcHJvY2Vzc29ycy4KKyAgQWxzbyBhZGRlZCBMaW51eCBsaWtlIEJVRygpIG1hY3Jvcy4KKworKiBDb2RpbmcgU3R5bGUgY2xlYW51cC4KKyAgUGF0Y2ggYnkgU3RlZmFubyBCYWJpYywgMzEgQXVnIDIwMDYKKworKiBBZGQgc3BsYXNoc2NyZWVuIHN1cHBvcnQgZm9yIE1DQzIwMCBib2FyZC4KKworKiBNYWtlIHRoZSBzZXJpYWwgZHJpdmVyIGZyYW1ld29yayB3b3JrIHdpdGggQ09ORklHX1NFUklBTF9NVUxUSQorICBlbmFibGVkCisKKyogUENJZSBlbmRwb2ludCBzdXBwb3J0IGZvciBBTUNDIFl1Y2NhIDQ0MFNQZSBib2FyZAorICBQYXRjaCBieSBUaXJ1bWFsYSBSIE1hcnJpLCAyNiBBdWcgMjAwNgorCisqIEltcHJvdmUgRElNTSBkZXRlY3Rpb24gZm9yIEFNQ0MgWXVjY2EgNDQwU1BlIGJvYXJkCisgIEltcHJvdmVkIHRoZSBtZW1vcnkgRElNTSBkZXRlY3Rpb24gZm9yIHRoZSBZdWNjYSA0NDBTUGUgYm9hcmQgZm9yCisgIHRoZSBjYXNlIHdoZXJlIGEgbWVtb3J5IERJTU0gaXMgZmFsc2VseSBkZXRlY3RlZCBhcyBwcmVzZW50LgorICBUaGlzIGlzc3VlIGlzIHNlZW4gb24gc29tZSBBTUNDIFl1Y2NhIDQ0MFNQZSB2YWxpZGF0aW9uIGJvYXJkcyBpZgorICBvbmx5IG9uZSA1MTJNQiBtZW1vcnkgRElNTSBpcyBpbnN0YWxsZWQsIGkuZS4gRElNTSBzbG90IDAgaXMKKyAgcG9wdWxhdGVkIGFuZCBESU1NIHNsb3QgMSBpcyBlbXB0eS4gIEluIHRoaXMgY2FzZSwgVS1Cb290IGRvZXMKKyAgbm90IGNvcnJlY3RseSBkZXRlY3QgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBESU1NIG1lbW9yeSBtb2R1bGUKKyAgaW5zdGFsbGVkIGFuZCB3aWxsIGZhbHNlbHkgZGV0ZWN0IHR3byBESU1NIG1lbW9yeSBtb2R1bGVzIGFyZQorICBwcmVzZW50IGFuZCB0aGVyZWZvcmUgVS1Cb290IHdpbGwgbm90IGNhbGN1bGF0ZSB0aGUgY29ycmVjdCBhbW91bnQKKyAgb2YgdG90YWwgbWVtb3J5IGFuZCB1LWJvb3Qgd2lsbCBub3QgYm9vdGluZyB1cC4KKyAgUGF0Y2ggYnkgQWRhbSBHcmFoYW0sIDI0IEF1ZyAyMDA2CisKKyogRml4IHR5cG8uCisKKyogQ29kZSBjbGVhbnVwCisKKyogVXBkYXRlIGZvciBNQ0MyMDAgLyBQUlMyMDAgYm9hcmRzOgorICAtIGF1dG8tYWRqdXN0IGNvbnNvbGUgZGV2aWNlIGZvciBMaW51eC4KKyAgLSBmaXggdHlwb3MuCisKKyogQWRkIGEgZml4IGZvciBhIGJ1Z2d5IFVTQiBkZXZpY2Ugb24gdGhlIEZPMzAwIGJvYXJkLgorCisqIFVwZGF0ZXMgZm9yIE1DQzIwMCAvIFBSUzIwMCBib2FyZHM6CisgIC0gc3VwcG9ydCBmb3IgY29uZmlndXJhdGlvbnMgd2l0aCBTRFJBTSBvciBERFIgbWVtb3J5LAorICAtIHN1cHBvcnQgZm9yIGhpZ2hib290IGFuZCBsb3dib290CisgIC0gYWRqdXN0aW5nIGVudmlyb25tZW50IGRlZmluaXRpb25zCisKKyogQWRkIHN1cHBvcnQgZm9yIFdUSyBGTzMwMCBib2FyZCAoVFFNNTIwMCBiYXNlZCkuCisKKyogRml4IFRRTTgzNHggaGFuZy4KKworKiBVcGRhdGUgZm9yIFNDNTIwIGJvYXJkLgorICBQYXRjaCBieSBEYXZpZCBVcGRlZ3JhZmYsIDAyIERlYyAyMDA1CisKKyogRml4ZWQgY29tbW9uLmggc3BlbGxpbmcgZXJyb3IuCisgIFBhdGNoIGJ5IENvcnkgVHVzYXIsIDMwIE5vdiAyMDA1CisKKyogRml4IHR5cG8uCisgIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDI4IE5vdiAyMDA1CisKKyogRml4IGZhdGxvYWQgY29tbWFuZCBvbiBGQVQzMiBmb3JtYXR0ZWQgcGFydGl0aW9ucy4KKyAgUGF0Y2ggYnkgSm9hY2hpbSBKYWVnZXIsIDE4IE5vdiAyMDA1CisKKyogRml4IGRyaXZlcnMvZG05MDAwLmMgd2hlbiBjb25maWd1cmVkIGluIDMyIGJpdCBtb2RlLgorICBQYXRjaCBieSBFcmljIEJlbmFyZCwgMTcgTm92IDIwMDUKKworKiBDbGVhbnVwIGRlYnVnIGNvZGUgZm9yIHl1Y2NhIGJvYXJkLgorCisqIE1DQzIwMDogcmVzdHJpY3QgYWRkcmVzc2FibGUgZmxhc2ggc3BhY2UgdG8gMzIgTUIKKworKiBBZGQgZGVidWcgY29uc29sZSBvbiBDT00xMiBmb3IgTUNDMjAwIGJvYXJkCisKKyogRml4IGNvbnRyb2wtYyBoYW5kaW5nIGluIENPTkZJR19DTURMSU5FX0VESVRJTkcKKyAgUHJvcGVybHkgcGFzcyBicmVhayBjb2RlIGJhY2sgZnJvbSByZWFkbGluZS4KKyAgUGF0Y2ggYnkgUm9nZXIgQmxvZmVsZCwgMzEgSnVsIDIwMDYKKworKiBBZGQgY29tbWFuZGxpbmUgaGlzdG9yeSBzdXBwb3J0IHRvIGFsbCBBTUNDIGV2YWwgYm9hcmRzCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDcgQXVnIDIwMDYKKworKiBBZGQgTWFjcm9uaXggTVhMVjMyMFQgZmxhc2ggc3VwcG9ydCBmb3IgQU1DQyBCYW1ib28KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBBdWcgMjAwNgorCisqIENoYW5nZSAibWlpIGluZm8iIHRvIG5vdCBwcmludCBhbiBlcnJvciB1cG9uIG1pc3NpbmcgUEhZIGF0IGFkZHJlc3MKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBBdWcgMjAwNgorCisqIEZpeCBQQ0ktRXhwcmVzcyBvbiBQUEM0NDBTUGUgcmV2LiBBLgorCisqIEZpeCBwcmVib290IG1lc3NhZ2Ugb24gVFFNODV4eCBhZnRlciBzd2l0Y2hpbmcgdG8gaHVzaCBwYXJzZXIuCisKKyogQWRhcHQgVFFNODV4eCByYW1kaXNrIGFkZHJlc3MgdG8gTGludXgga2VybmVsIG1lbW9yeSBtYXAKKworKiBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBQQ0ktRXhwcmVzcyBvbiBQUEM0NDBTUGUgKFl1Y2NhIGJvYXJkKS4KKworKiBGaXggY29tcGlsZXIgd2FybmluZyBmb3IgVFJBQiBib2FyZC4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDcgQXVnIDIwMDYKKworKiBQcmV2ZW50IFVTQiBjb21tYW5kcyBmcm9tIHdvcmtpbmcgd2hlbiBVU0IgaXMgc3RvcHBlZC4KKworKiBBZGQgcnVkaW1lbnRhcnkgaGFuZGxpbmcgb2YgYWx0ZXJuYXRlIHNldHRpbmdzIG9mIFVTQiBpbnRlcmZhY2VzLgorICBUaGlzIGlzIGluIG9yZGVyIHRvIGZpeCBpc3N1ZXMgd2l0aCBzb21lIFVTQiBzdGlja3MgdGltaW5nIG91dAorICBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFNvbWUgY29kZSByZWFkYWJpbGl0eSBpbXByb3ZlbWVudHMuCisKKyogUFBDNDQwIEREUiBzZXR1cDogU2V0IFNEUkFNMF9DRkcwW1BNVV09MCBmb3IgYmVzdCBwZXJmb3JtYW5jZQorICBBTUNDIHN1Z2dlc3RlZCB0byBzZXQgdGhlIFBNVSBiaXQgdG8gMCBmb3IgYmVzdCBwZXJmb3JtYWNlIG9uCisgIHRoZSBQUEM0NDAgRERSIGNvbnRyb2xsZXIuCisgIFBsZWFzZSBzZWUgZG9jL1JFQURNRS40NDAtRERSLXBlcmZvcm1hbmNlIGZvciBkZXRhaWxzLgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI4IEp1bCAyMDA2CisKKyogQU1DQyBiYW1ib28gKDQ0MEVQKSBVLUJvb3QgaW1hZ2UgcmVkdWNlZCB0byAzODRrYnl0ZQorICBQbGVhc2Ugc2VlIGRvYy9SRUFETUUuYmFtYm9vIGZvciBkZXRhaWxzLgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI3IEp1bCAyMDA2CisKKyogRml4IENPTkZJR19DTURMSU5FX0VESVRJTkcgaW1wbGVtZW50YXRpb24KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyNyBKdWwgMjAwNgorCisqIEZpeCBwcmVib290IG1lc3NhZ2Ugb24gVFFNNTIwMCBhZnRlciBzd2l0Y2hpbmcgdG8gaHVzaCBwYXJzZXIuCisKKyogTUNDMjAwOiBzZXQgZGVmYXVsdCBjb25maWd1cmF0aW9uIHRvIGxvd19ib290IEREUiwKKyAgYW5kIHN1cHBvcnQgZm9yIGNvbmZpZ3VyYWJsZSBvcHRpb25zIGhpZ2hfYm9vdCBhbmQvb3IgU0RSQU0uCisKKyogQWRkIHN1cHBvcnQgZm9yIDI1NiBNQiBTRFJBTSBvbiBDUFU4NworICBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDI1IE5vdiAyMDA1CisKKyogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIGNhbTUyMDAgYm9hcmQgKGJhc2VkIG9uIFRRTTUyMDBTKS4KKworKiBNb3JlIGNvZGUgY2xlYW51cAorCisqIERpc2FibGVkIGt2bWUwODAgYm9hcmQgaW4gTUFLRUFMTCBiZWNhdXNlIG9mIGJ1aWxkIHByb2JsZW1zLgorCisqIENvZGUgY2xlYW51cAorCisqIFVwZGF0ZSBOZXRTdGFyIGJvYXJkCisgIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAwMyBOb3YgMjAwNQorCisqIE1ha2UgY29kZSBiZXR0ZXIgcmVhZGFibGUuCisgIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAxNCBTZXAgMjAwNQorCisqIEVuYWJsZSBpbml0cmQgQVRBRyBmb3IgeG0yNTAgYm9hcmQuCisgIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMDUgU2VwIDIwMDUKKworKiBBZGQgcmVhZGxpbmUgY21kbGluZS1lZGl0aW5nIGV4dGVuc2lvbgorICBQYXRjaCBieSBKaW5IdWEgTHVvLCAwMSBTZXAgMjAwNQorCisqIEFkZCBzdXBwb3J0IGZvciBmcmllbmRseS1hcm0gU0JDLTI0MTBYIGJvYXJkCisgIFBhdGNoIGJ5IEppbkh1YSBMdW8sIDAxIFNlcCAyMDA1CisKKyogRml4IG11bHRpLXBhcnQgaW1hZ2Ugc3VwcG9ydCBvbiBpMzg2IHBsYXRmb3JtLgorICBQYXRjaCBieSBEYXZpZCBVcGRlZ3JhZmYsIDE5IEF1ZyAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIEtWTUUwODAgYm9hcmQKKyAgUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAxOCBBdWcgMjAwNQorCisqIEZpeCBNSVBTIExFIGJ1aWxkIHByb2JsZW0KKyAgUGF0Y2ggYnkgTWF0ZWogS3VwbGplbiwgMTAgQXVnIDIwMDUKKworKiBDaGVjayBhcmd1bWVudCBjb3VudCBpbiAibWlpIiBjb21tYW5kLgorICBQcm9ibGVtIHBvaW50ZWQgb3V0IGJ5IEFuZHJldyBEeWVyLCAxMyBKdW4gMjAwNQorCisqIENsZWFudXAgVFFNNTIwMCBib2FyZCBjb25maWd1cmF0aW9uczoKKyAgLSBtYWtlIGhpZ2hib290IGNvbmZpZ3VyYXRpb25zIHVzZSBlbnZpcm9ubWVudCBhdCBoaWdoIGVuZCwgdG9vLAorICAgIHRvIGF2b2lkIGZsYXNoIGZyYWdtZW50YXRpb24KKyAgLSBhbHdheXMgdXNlIHJlZHVuZGFuZCBlbnZpcm9ubWVudAorICAtIGRvbid0IGVuYWJsZSB2aWRlbyBjb2RlIGZvciBtb2R1bGVzIHdpdGhvdXQgZ3JhcGhpY3MgY29udHJvbGxlcgorICAtIHByb3ZpZGUgdXNlZnVsICh0aG91Z2ggZGlmZmVyZW50KSBtdGRwYXJ0cyBzZXR0aW5ncworICAtIGdldCByaWQgb2YgQ09ORklHX0NTX0FVVE9DT05GIHdoaWNoIHdhcyBhbHdheXMgc2V0IGFueXdheQorCisqIEV4dGVuZCBta2NvbmZpZyB0b29sIHRvIHByaW50IG1vcmUgdXNlZnVsIHRhcmdldCBuYW1lCisKKyogQWRkIHN1cHBvcnQgZm9yIGhpZ2gtYm9vdCBvbiBUUU01MjAwIGFuZCBUUU01MjAwUyBib2FyZHMuCisgIEhpbnQ6IHRoZSBDUExEIG9uIHRoZSBUUU01MjAwIG11c3QgYmUgcHJvZ3JhbW1lZCB3aXRoIGEgc29mdHdhcmUKKyAgdmVyc2lvbiBzdXBwb3J0aW5nIHRoZSBoaWdoIGJvb3Qgb3B0aW9uISBUaGUgbmV3IFRRTTUyMDBTIGlzCisgIGFscmVhZHkgc3VwcG9ydGluZyB0aGlzIG9wdGlvbi4gT24gdGhlIFRRTTUyMDAgdGhpcyBvcHRpb24gd2lsbCBiZQorICBzdXBwb3J0ZWQgaW4gY29uZmlndXJhdGlvbnMgd2l0aCBNUEM1MjAwIHJldiBCIHByb2Nlc3NvcnMuCisgIFRvIGFjdHVhbGx5ICJoaWdoIGJvb3QiLCBzZXQganVtcGVyIFgzMCBvbiB0aGUgU1RLNTJ4eC4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTIgSnVsIDIwMDYKKworKiBBZGQgc3VwcG9ydCBmb3IgbmV3IFRRTTUyMDAgcmV2aXNpb25zCisgIC0gU3VwcG9ydCBmb3IgVFFNNTIwMFMgKHNob3J0IHZlcnNpb24gd2l0aG91dCBncmFwaGljIGNvbnRyb2xsZXIpCisgIC0gU3VwcG9ydCBmb3IgbW9kdWxlcyB3aXRoICdOJyB0eXBlIFMyOUdMMTI4TiBTcGFuc2lvbiBmbGFzaGVzCisgICAgKHJlcXVpcmVzIGNoYW5nZXMgdG8gZmxhc2ggbGF5b3V0KQorICAtIFN1cHBvcnQgZm9yIE1QQzUyMDBCIGNwdSAobW9zdGx5IHN1cHBvcnQgZm9yIHNlY29uZCBTRFJBTSBiYW5rKQorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwNyBKdWwgMjAwNgorCisqIEZpeCBzdXBwb3J0IGZvciBQUy8yIGtleWJvYXJkIG9uIFRRTTg1eHggYm9hcmRzCisgIFRoZSBQUy8yIGtleW9iYXJkIGRyaXZlciBmb3IgdGhlIFRRTTg1eHggbW9kdWxlcyBvbmx5IHN1cHBvcnRzIHRoZQorICBpbnRlcm5hbCBEVUFSVCBvZiB0aGUgTVBDODV4eCBDUFUuIFNpbmNlIHRoZSBNUEM4NTYwIGRvZXNuJ3QKKyAgaW5jbHVkZSBhIERVQVJULCB0aGUgVFFNODU2MCBtb2R1bGVzIGNhbid0IGJlIHVzZWQgd2l0aCB0aGUgUFMvMgorICBrZXlib2FyZCBjb250cm9sbGVyIG9uIHRoZSBTVEs4NXh4IGJvYXJkLgorICBUaGUgUFMvMiBrZXlib2FyZCBkcml2ZXIgc2hvdWxkIHdvcmsgd2l0aCB0aGUgbW9kdWxlcyBUUU04NTQwLAorICBUUU04NTQxIGFuZCBUUU04NTU1LCBidXQgaXQgb25seSBoYXMgYmVlbiB0ZXN0ZWQgb24gYSBUUU04NTQwLCB5ZXQuCisgIE1ha2Ugc3VyZSB0aGUgUFMvMiBjb250cm9sbGVyIG9uIHRoZSBTVEs4NXh4IGlzIHByb2dyYW1tZWQuIEp1bXBlcgorICBzZXR0aW5nczogWDY2IDEtMiwgOS0xMDsgWDYxIDItMworICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyMSBKdW4gMjAwNgorCisqIEFkanVzdCBSVEMgY2VudHVyeSBoYW5kbGluZyBvbiBTVEs1Mnh4IGJvYXJkIHRvIG1hdGNoIExpbnV4IGRyaXZlci4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTIgSnVuIDIwMDYKKworKiBBZGp1c3QgZmlsZW5hbWVzIGZvciBVU0IgdXBkYXRlIGltYWdlcyBvbiBUUkFCIGJvYXJkLgorICBEdXJpbmcgYW4gYXV0b21hdGljIHVwZGF0ZSB2aWEgVVNCIHN0aWNrLCBVLUJvb3Qgc2VhcmNoZXMgZm9yCisgIGltYWdlcyB3aXRoIHRoZSBuYW1lICJmaXJtd2FyZS5pbWciIGFuZCAia2VybmVsLmltZyIuIFRoaXMgbmFtZXMKKyAgYXJlIG5vdyBjaGFuZ2VkIHRvICJmaXJtd18wMS5pbWciIGFuZCAia2VybmxfMDEuaW1nIi4gVGhpcyBpcyBkb25lLAorICB0byBwcmV2ZW50IHVwZGF0ZXMgb2YgbmV3IGJvYXJkcyAod2l0aCB0aGUgbmV3IG1hY3JvbmljcyAiYyIgc3RlcAorICBmbGFzaGVzKSB3aXRoIG9sZCwgaW5jb21wYXRpYmxlIGZpcm13YXJlIG9yIGtlcm5lbCB2ZXJzaW9ucy4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjEgSnVuIDIwMDYKKworKiBCdWdmaXggaW4gVkZEIHJvdXRpbmUgb24gVFJBQiBib2FyZC4KKyAgTWFrZSBzdXJlIHVwcGVyIGxleHQgcGl4ZWwgY2FuIGJlIHNldCB0byBibHVlLCB0b28KKyAgKHNvIGZhciBvbmx5IHJlZCB3YXMgcG9zc2libGUpLgorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNSBGZWIgMjAwNgorCisqIEVuYWJsZSBidWZmZXJlZCBmbGFzaCB3cml0ZXMgZm9yIFRCNTIwMCBib2FyZC4KKworKiBGaXggc29tZSBidWdzIGluIFRSQUIgYm9hcmQgZmxhc2ggZHJpdmVyLgorICAtIGluY3JlYXNlIENGR19GTEFTSF9FUkFTRV9UT1VUIGZyb20gMiB0byAxNSBzZWNvbmRzCisgIC0gdXNlIENGR19GTEFTSF9XUklURV9UT1VUIGZvciBwcm9ncmFtbWluZyBpbnN0ZWFkIG9mIENGR19GTEFTSF9FUkFTRV9UT1VUCisgIC0gcmVtb3ZlICJVbmxvY2sgQnlwYXNzIiBtb2RlLCBiZWNhdXNlIG1hY3Jvbml4IGZsYXNoZXMgZG8gbm90IHN1cHBvcnQKKyAgICB0aGlzIG1vZGUgb2ZmaWNpYWxseQorICAtIGZpeCBmbGFzaCByZXNldCBjb21tYW5kIGZyb20gMHgwMEZGIHRvIDB4MDBGMC4gMHgwMEZGIGlzIG9ubHkgc3BlY2lmaWVkCisgICAgZm9yIEludGVsIGNvbXBhdGlibGUgZmxhc2hlcywgbm90IGZvciBBTUQgY29tcGF0aWJsZS4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTUgRmViIDIwMDYKKworKiBBZGQgYWRkaXRpb25hbCBlcnJvciBtZXNzYWdlcyB0byBmbGFzaCBkcml2ZXIgb24gVFJBQiBib2FyZAorICAoZm9yIGVyYXNlIGVycm9ycyBhbmQgdGltZW91dCBlcnJvcnMpCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE0IEZlYiAyMDA2CisKKyogQWRkIHN1cHBvcnQgZm9yIFRCNTIwMCBib2FyZAorICBUaGUgVEI1MjAwICgiVGlueWJveCIpIGlzIGEgc21hbGwgYmFzZWJvYXJkIGZvciB0aGUgVFFNNTIwMCBtb2R1bGUKKyAgaW50ZWdyYXRlZCBpbiBhIGxpdHRsZSBhbHVtaW5pdW0gY2FzZS4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgOCBKdW4gMjAwNgorCisqIEVuYWJsZSBidWZmZXJlZCBmbGFzaCB3cml0ZXMgZm9yIFRRTTUyMDAgYm9hcmQuCisKKyogRml4IHByb2JsZW1zIHdpdGggU2FuRGlzayBDb3Jwb3JhdGlvbiBDcnV6ZXIgTWljcm8gVVNCIG1lbW9yeSBzdGljay4KKworKiBBZGQgc3VwcG9ydCBmb3IgVFFNODg1RCBib2FyZC4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjAgTWFyIDIwMDYKKworKiBGaXggRkVDIGluaXRpYWxpc2F0aW9uOiBBbGwgTUlJIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSB2aWEgRkVDMQorICByZWdpc3RlcnMsIGJ1dCBNSUlfU1BFRUQgd2FzIGNvbmZpZ3VyZWQgYWNjb3JkaW5nIHRvIEZFQyB1c2VkLiBTbworICBpZiBvbmx5IEZFQzIgd2FzIHVzZWQsIHRoaXMgY2F1c2VkIHRoZSByZWFsIE1JSV9TUEVFRCByZWdpc3RlciBpbgorICBGRUMxIHRvIHN0YXkgdW5pbml0YWxpc2VkLCBsZXFhZGluZyB0byAibWlpX3NlbmQgU1RVQ0shIiBtZXNzYWdlcy4KKyAgRml4OiBhbHdheXMgY29uZmlndXJlIE1JSV9TUEVFRCBvbiBGRUMxIG9ubHkuCisgIFBhdGNoIGJ5IE1hcmt1cyBLbG90emJ1ZWNoZXIsIDEyIEp1bCAyMDA2CisKKyogQWRkIHN1cHBvcnQgZm9yIFNQQzE5MjAgYm9hcmQuCisgIFBhdGNoIGJ5IE1hcmt1cyBLbG90emJ1ZWNoZXIsIDEyIEp1bCAyMDA2CisKKyogTUNDMjAwIGJvYXJkOiBzdXBwb3J0IGNvbnNvbGUgb24gYW55IG9uZSBvZiB0aGUgUXVhZCBVQVJUIHBvcnRzLgorCisqIEZpeCBlcnJvciBpbiBmbGFzaCBwcm90ZWN0aW9uIGNhbGN1bGF0aW9uIG9uIE1DQzIwMCBib2FyZC4KKworKiBNYWpvciBQQ01DSUEgQ2xlYW51cCB0byBtYWtlIGNvZGUgYmV0dGVyIHJlYWRhYmxlIGFuZCBtYWludGFpbmFibGUuCisgIE5vdGVzOgorICAtIEJvYXJkLWRlcGVuZGVuZCBjb2RlIGZvciBSUFhMSVRFIGFuZCBSUFhDTEFTU0lDLWJhc2VkIGJvYXJkcworICAgIHBsYWNlZCB0byB0aGUgZHJpdmVycy9ycHhfcG1jaWEuYyBmaWxlIHRvIGF2b2lkIGR1cGxpY2F0aW9uLgorICAgIFNhbWUgZm9yIFRRTTh4eC1iYXNlZCBib2FyZHMgKGRyaXZlcnMvdHFtOHh4X3BtY2lhLmMpLgorICAtIGRyaXZlcnMvaTgyMzY1LmMgaGFzIGJlZW4gc3BsaXQgaW50byB0d28gcGFydHMgbG9jYXRlZCBhdAorICAgIGJvYXJkL2F0Yy90aTExM3guYyBhbmQgYm9hcmQvY3BjNDUvcGQ2NzI5MC5jIChBVEMgYW5kIENQQzQ1IGFyZQorICAgIHRoZSBvbmx5IGJvYXJkcyB1c2luZyBDT05GSUdfODIzNjUpLgorICAtIENoYW5nZXMgd2VyZSB0ZXN0ZWQgZm9yIGNsZWFuIGJ1aWxkIGFuZCAqdmVyeSogKmZldyogYm9hcmRzLgorCisqIEZpeCB0aW1lciBwcm9ibGVtcyBvbiBBTUNDIHl1Y2NhIGJvYXJkLgorICBTZXQgVGltZXIgQ2xvY2sgU2VsZWN0IHRvIHVzZSBDUFUgY2xvY2sgYXMgYSB0aW1lciBpbnB1dCBzb3VyY2UuCisKKyogQnJpbmcgeXVjY2EgY29uZmlnIG1vcmUgaW4gbGluZSB3aXRoIG90aGVyIEFNQ0MgYm9hcmRzLgorCisqIEFkZCBBTUNDIGJhbWJvbyBib2FyZCB0byBNQUtFQUxMIGJ1aWxkIHNjcmlwdC4KKworKiBGaXggQU1DQyBiYW1ib28gZXZhbCBib2FyZCBjb21waWxhdGlvbiBlcnJvcnMuCisKKyogQWRkIHN5c3RlbSBtZW1vcnkgdG8gdGhlIFBDSSByZWdpb24gbGlzdCBmb3IgQU1DQyBQUEM0NHggQ1BVcy4KKyAgRW5hYmxlZCBpdCBmb3IgWXVjY2EgYm9hcmQuCisKKyogQ2xlYW51cCBjb25maWcgZmlsZSBhbmQgYm9vdHVwIG91dHB1dCBmb3IgWXVjY2EgYm9hcmQuCisKKyogRml4IENPTkZJR180NDBfR1ggZGVmaW5lIHVzYWdlLgorCisqIFJlbW92ZSBhdXRvZ2VuZXJhdGVkIGJtcF9sb2dvLmggZmlsZS4KKworKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyA0NDBTUGUgQ1BVIGJhc2VkIGV2YWwgYm9hcmQgKFl1Y2NhKS4KKworKiBDYWxsIHNlcmlhbF9pbml0aWFsaXplKCkgYmVmb3JlIGZpcnN0IGRlYnVnKCkgaXMgdXNlZC4KKworKiBDbGVhbnVwIHRyYWIgYm9hcmQgZm9yIEdDQy00LngKKworKiBWb2ljZUJsdWUgdXBkYXRlOiB1c2UgbmV3IE1URCBmbGFzaCBwYXJ0aXRpb25pbmcgbWV0aG9kcywgdXNlIG1vcmUKKyAgcmVhc29uYWJsZSBURVhUX0JBU0UsIHVwZGF0ZSBkZWZhdWx0IGVudmlyb25tZW50IGFuZCBlbmFibGUga2V5ZWQKKyAgYXV0b2Jvb3QuCisgIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAxNi4gQXVnIDIwMDUKKworKiBBZGQgZm9yZ290dGVuIGNoYW5nZXMgZm9yIHRoZSBQTEVCIDIgQm9hcmQuCisgIFBhdGNoIGJ5IERhdmlkIFNub3dkb24sIDEzLiBBdWcgMjAwNQorCisqIEFkZCBzdXBwb3J0IGZvciB3clBQTUM3eHgvNzR4eCBib2FyZHMKKyAgUGF0Y2ggYnkgUmljaGFyZCBEYW50ZXIsIDEyIEF1ZyAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIGd0aDIgYm9hcmQKKyAgUGF0Y2ggYnkgVGhvbWFzIExhbmdlLCBBdWcgMTEgMjAwNQorCisqIEFkZCBzdXBwb3J0IGZvciBDT05GSUdfU0VSSUFMX01VTFRJIG9uIE1QQzV4eHgKKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgOCBKdW4gMjAwNgorCisgIFRoaXMgcGF0Y2ggc3VwcG9ydHMgdHdvIHNlcmlhbCBjb25zb2xlcyBvbiBib2FyZHMgd2l0aAorICBhIE1QQzV4eHggQ1BVLiBUaGUgY29uc29sZSBjYW4gYmUgc3dpdGNoZWQgYXQgcnVudGltZQorICBieSBzZXR0aW5nIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyciB0byB0aGUgZGVzaXJlZCBzZXJpYWwKKyAgaW50ZXJmYWNlIChzZXJpYWwwIG9yIHNlcmlhbDEpLiBUaGUgUFNDcyB0byBiZSB1c2VkIGFzCisgIGNvbnNvbGUgcG9ydCBhcmUgZGVmaW5kZWQgYnkgQ09ORklHX1BTQ19DT05TT0xFCisgIGFuZCBDT05GSUdfUFNDX0NPTlNPTEUyLgorICBTZWUgUkVBRE1FLnNlcmlhbF9tdWx0aSBmb3IgZGV0YWlscy4KKworKiBCdWdmaXggaW4gSTJDIGluaXRpYWxpc2F0aW9uIG9uIFMzQzI0MDAuCisgIElmIHRoZSBidXMgaXMgYmxvY2tlZCBiZWNhdXNlIG9mIGEgcHJldmlvdXNseSBpbnRlcnJ1cHRlZAorICB0cmFuc2ZlciwgdXAgdG8gZWxldmVuIGNsb2NrcyBhcmUgZ2VuZXJhdGVkIG9uIHRoZSBJMkNTQ0wKKyAgbGluZSB0byBjb21wbGV0ZSB0aGUgdHJhbnNmZXIgYW5kIHRvIGZyZWUgdGhlIGJ1cy4KKyAgV2l0aCB0aGlzIGZpeCBwaW4gSTJDU0NMIChQRzYpIGlzIHJlYWxseSBjb25maWd1cmVkIGFzIEdQSU8KKyAgc28gdGhlIGNsb2NrIHB1bHNlcyBhcmUgcmVhbGx5IGdlbmVyYXRlZC4KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDQgQXByIDIwMDYKKworKiBGaXggRERSNiBlcnJhdGEgb24gVFFNODM0eCBib2FyZHMKKyAgUGF0Y2ggYnkgVGhvbWFzIFdhZWhuZXIsIDA3IE1hciAyMDA2CisKKyogUmVtb3ZlIG9ic29sZXRlIGZsYXNoIGRyaXZlciBib2FyZC90cW01MjAwL2ZsYXNoLmMKKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTEgSmFuIDIwMDYKKworKiBVcGRhdGUgY29uZmlndXJhdGlvbiBmb3IgQ01DLVBVMiBib2FyZAorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNyBOb3YgMjAwNQorCisqIEFkZCBzdXBwb3J0IGZvciBQUy8yIGtleWJvYXJkIG9uIFRRTTg1eHggYm9hcmQKKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDcgTm92IDIwMDUKKworICBUZXN0ZWQgb24gYSBTVEs4NVhYIGJhc2Vib2FyZC4gTWFrZSBzdXJlIHRoZSBQUy8yIGNvbnRyb2xsZXIKKyAgaGFzIGJlZW4gcHJvZ3JhbW1lZC4gSnVtcGVyIFNldHRpbmdzOiBYNjYgMS0yLCA5LTEwOyBYNjEgMi0zCisKKyogRml4IFRSQUIgY2hhbm5lbCBzd2l0Y2hpbmcgZGVsYXkgZm9yIHRyYWJfZmt0LmJpbiBzdGFuZGFsb25lIGFwcGxpa2F0aW9uCisgIEluIHRzYzIwMDBfcmVhZF9jaGFubmVsKCkgdGhlIGRlbGF5IGFmdGVyIHNldHRpbmcgdGhlIG11bHRpcGxleGVyCisgIHRvIGEgdGVtcGVyYXR1cmUgY2hhbm5lbCBpcyBpbmNyZWFzZWQgZnJvbSAxLDUgbXMgdG8gMTAgbXMuIFRoaXMKKyAgaXMgdG8gYWxsb3cgdGhlIG11bHRpcGxleGVyIGlucHV0cyB0byBzdGFiaWxpemUgYWZ0ZXIgaHVnZSBzdGVwcworICBvZiB0aGUgaW5wdXQgc2lnbmFsIGxldmVsLgorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAwOCBOb3YgMjAwNQorCisqIEFkanVzdCBUUU01MjAwIG1ha2UgdGFyZ2V0cworICBNYWtlIHRoZSBhdXRvbWF0aWMgQ1MgY29uZmlndXJhdGlvbiB0aGUgZGVmYXVsdC4KKyAgVGhlIGRlZGljYXRlZCBjb25maWd1cmF0aW9ucyBDT05GSUdfVFFNNTIwMF9BQSwgQ09ORklHX1RRTTUyMDBfQUIKKyAgYW5kIENPTkZJR19UUU01MjAwX0FDIGFyZSByZW1vdmVkLgorICAiVFFNNTIwMF9jb25maWciIGlzIG5vdyB0aGUgZGVmYXVsdCBmb3IgU1RLNTJYWC4yMDAgYmFzZSBib2FyZHMuCisgIE9uIGEgU1RLNTJYWC4xMDAgYmFzZSBib2FyZCAiVFFNNTIwMF9TVEsxMDBfY29uZmlnIiBtdXN0IGJlIHVzZWQuCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA3IE5vdiAyMDA1CisKKyogRml4IHNldHRpbmcgb2YgZW52aXJvbm1lbnQgdmFyaWFibGUgInZlciIgb24gdHJhYiBib2FyZAorICBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUgInZlciIgaXMgbm93IHNldCBiZWZvcmUKKyAgZG9fYXV0b191cGRhdGUoKSBpcyBjYWxsZWQsIHNvIHRoYXQgInZlciIgY2FuIGJlIHVzZWQKKyAgaW4gVVNCIHVwZGF0ZSBzY3JpcHRzLgorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBPY3QgMjAwNQorCisqIEZpeCB3cm9uZyB1c2FnZSBvZiB1ZGVsYXkoKSBpbiBsZWRfYmxpbmsoKSBvbiB0cmFiIGJvYXJkCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE9jdCAyMDA1CisKKyogRml4IHVkZWxheSBidWcgaW4gdmZkLmMgZm9yIHRyYWIgYm9hcmQKKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgT2N0IDIwMDUKKworKiBEaXNhYmxlIEpGRlMyIHN1cHBvcnQgZm9yIHRyYWIgYm9hcmQKKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgT2N0IDIwMDUKKworKiBDaGFuZ2UgbXRkcGFydHMgZGVmaW5pdGlvbiBvbiB0cmFiIGJvYXJkIHRvIG1hdGNoIGN1cnJlbnQgZmxhc2ggbWFwCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI3IE9jdCAyMDA1CisKKyogRml4IG1lbW9yeSBpbml0IHByb2JsZW1zIG9uIE1DQzIwMCBib2FyZAorCisqIEZpeCBJeEV0aERCLmggdG8gY29tcGlsZSBhZ2FpbgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE0IEp1biAyMDA2CisKKyogTWlub3IgY2xlYW51cCBmb3IgUENTNDQwRVAgYm9hcmQKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBKdW4gMjAwNgorCisqIEFkZCBNQ0Y1MjgyIHN1cHBvcnQgKHdpdGhvdXQgcHJlbG9hZGVyKQorICByZWxvY2F0ZSBpY2hhY2hlX1N0YXRlIHRvIHJhbQorICB1LWJvb3QgY2FuIHJ1biBmcm9tIGludGVybmFsIGZsYXNoCisgIEFkZCBFQitNQ0YtRVYxMjMgYm9hcmQgc3VwcG9ydC4KKyAgQWRkIG02OGsgQm9hcmRzIHRvIE1BS0VBTEwKKyAgUGF0Y2ggZnJvbSBKZW5zIFNjaGFyc2lnLCAwOCBBdWcgMjAwNQorCisqIE5pb3MgSUkgLSBBZGQgQWx0ZXJhIEVQMUMyMCwgRVAxUzEwIGFuZCBFUDFTNDAgYm9hcmRzCisgIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMDggSnVuIDIwMDYKKworKiBOaW9zIElJIC0gQWRkIEVQQ1MgQ29udHJvbGxlciBib290cm9tIHdvcmstYXJvdW5kCisgIC1XaGVuIGJvb3RpbmcgZnJvbSBhbiBlcGNzIGNvbnRyb2xsZXIsIHRoZSBlcGNzIGJvb3Ryb20gbWF5IGxlYXZlIHRoZQorICBzbGF2ZSBzZWxlY3QgaW4gYW4gYXNzZXJ0ZWQgc3RhdGUgY2F1c2luZyBzb2Z0IHJlc2V0IGhhbmcuIFRoaXMKKyAgcGF0Y2ggZW5zdXJlcyBzbGF2ZSBzZWxlY3QgaXMgbmVnYXRlZCBhdCByZXNldC4KKyAgUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwOCBKdW4gMjAwNgorCisqIFVwZGF0ZSBQSzFDMjAgYm9hcmQKKyAgLVVwZGF0ZSBiYXNlIGFkZHJlc3NlcyBmb3Igc3RhbmRhcmQgY29uZmlndXJhdGlvbgorICAtRWxpbWluYXRlIHVzZSBvZiBDQUNIRV9CWVBBU1MgaW4gYm9hcmQgY29kZQorICBQYXRjaCBieSBTY290dCBNY051dHQsIDA4IEp1biAyMDA2CisKKyogTmlvcyBJSSAtIEZpeCBJL08gTWFjcm9zIGFuZCBtaW5pLWFwcCBzdHVicworICAtRml4IGFzbS9pby5oIG1hY3JvcworICAtRWxpbWluYXRlIHVzZSBvZiBDQUNIRV9CWVBBU1MgaW4gY3B1IGNvZGUKKyAgLUVsaW1pbmF0ZSBhc3NlbWJsZXIgd2FybmluZ3MKKyAgLUZpeCBtaW5pLWFwcCBzdHVicyBhbmQgZm9yY2Ugbm8gc21hbGwgZGF0YQorICBQYXRjaCBieSBTY290dCBNY051dHQsIDA4IEp1biAyMDA2CisKKyogRml4IFUtQm9vdCBlbnZpcm9ubWVudCBzZWN0b3IgcHJvdGVjdGlvbiBvbiBNQ0MyMDAgYm9hcmQKKworKiBNaW5vciBjbGVhbnVwIGZvciBQQ1M0NDBFUCBib2FyZAorCisqIFVwZGF0ZSBQQ1M0NDBFUCBwb3J0IHRvIGZpdCBpbnRvIG9uZSBmbGFzaCBkZXZpY2UgKGluY2wuIGVudmlyb25tZW50KQorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA2IEp1biAyMDA2CisKKyogQWRkIHN1cHBvcnQgZm9yIFBDUzQ0MEVQIGJvYXJkCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDIgSnVuIDIwMDYKKworKiBGaXggZXhhbXBsZXMvTWFrZWZpbGU7IHNvbWUgYnVpbGQgdGFyZ2V0cyB3ZXJlIGxvc3QKKworKiBGaXggd2F0Y2hkb2cgaGFuZGxpbmcgaW4gQ0ZJIGZsYXNoIGRyaXZlcgorICBKdXN0IHVzZSB1ZGVsYXkoKSB3aGVuIHdhaXRpbmcgZm9yIHN0YXR1cyBjaGFuZ2VzIHdoaWNoIHdpbGwKKyAgaW1wbGljaXRlbHkgdHJpZ2dlciB0aGUgd2F0Y2hkb2cuCisKKyogRml4IFBDSSB0byBtZW1vcnkgd2luZG93IHNpemUgcHJvYmxlbXMgb24gUE04MnggYm9hcmRzCisgIFdlIHVzZSB0aGUgImF1dG9tYXRpYyIgbW9kZSB0aGF0IHdhcyB1c2VkIGZvciAgdGhlICBNUEM4MjY2QURTICBhbmQKKyAgTVBDODI3MiBib2FyZHMuIEV2ZW50dWFsbHkgdGhpcyBzaG91bGQgYmUgdXNlZCBvbiBhbGwgYm9hcmRzP10KKyAgUGF0Y2ggYnkgV29sZmdhbmcgR3JhbmRlZ2dlciwgMTcgSmFuIDIwMDYKKworKiBDb3JyZWN0IEdQSU8gc2V0dXAgKFVBUlQxL0lSUSdzKSBvbiB5b3NlbWl0ZSAmIHllbGxvd3N0b25lCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjkgTWF5IDIwMDYKKworKiBVcGRhdGUgSW50ZWwgSVhQNHh4IHN1cHBvcnQKKyAgLSBBZGQgSVhQNHh4IE5QRSBldGhlcm5ldCBNQUMgc3VwcG9ydAorICAtIEFkZCBzdXBwb3J0IGZvciBJbnRlbCBJWERQRzQyNSBib2FyZAorICAtIEFkZCBzdXBwb3J0IGZvciBQcm9kcml2ZSBQRE5CMyBib2FyZAorICAtIEFkZCBJUlEgc3VwcG9ydAorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIzIE1heSAyMDA2CisKKyogRml4IHByb2JsZW0gaW4gUFZSIGRldGVjdGlvbiBmb3IgNDQwR1IKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBNYXkgMjAwNgorCisqIEZpeCBnY2MgMy40LnggQUZMQUdTIHNldHRpbmcgZm9yIG02OGsgcGxhdGZvcm0uCisKKyogRW5hYmxlIGF1dG9ib290IGZvciBNNTI3MUVWQiBib2FyZC4KKworKiBDaGFuZ2VkIGRlZmF1bHQgcmFtZGlzayBhZGRyIGluIHlvc2VtaXRlL3llbGxvd3N0b25lIHBvcnRzCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgTWF5IDIwMDYKKworKiBGaXggUENNQ0lBIHN1cHBvcnQgb24gdmlydGxhYjIKKworKiBBZGQgc3VwcG9ydCBmb3IgVmlydExhYjIgYm9hcmQKKyAgKG5lZWRlZCBiZWNhdXNlIG9mIGRpZmZlcmVuY2VzIGluIHRoZSBQQ01DSUEgaGFyZHdhcmUpLgorCisqIE1pbm9yIGNsZWFudXAuCisKKyogVXBkYXRlIHlvc2VtaXRlIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIGZsYXNoIHdyaXRlIGJ1ZmZlciBzdXBwb3J0CisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgTWF5IDIwMDYKKworKiBGaXggY29tcGlsZSB3YXJuaW5ncyBpbiBjb21tb24veHl6TW9kZW0uYworICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIE1heSAyMDA2CisKKyogQWRkIHN1cHBvcnQgZm9yIEFNQ0MgNDQwRVAgUmV2IEMgYW5kIDQ0MEdSIFJldiBCCisgIFBhdGNoIGJ5IEpvaG4gT3RrZW4sIDA4IE1heSAyMDA2CisKKyogT01BUCA1OTEyL09TSzogdXBkYXRlIEVNSUZTIENTMSB0aW1pbmdzOgorICBQcm9ibGVtcyBoYXZlIGJlZW4gc2VlbiBpbiB0aGUgbGludXgga2VybmVsJ3Mgc21jOTF4IG5ldHdvcmsgZHJpdmVyCisgIGR1ZSB0byBpbXByb3BlciBidXMgdGltaW5ncy4gIFRoZSBsYXRlc3QgMi42IE9NQVAga2VybmVscyBjdXJyZW50bHkKKyAgaGF2ZSBhIHdvcmthcm91bmQsIGJ1dCB0aGlzIGZpeCBiZWxvbmdzIGluIHUtYm9vdC4KKyAgUGF0Y2ggYnkgS2V2aW4gSGlsbWFuLCAxMyBPY3QgMjAwNQorCisqIEZpeCBSRUdfTVBVX0xPQURfVElNRVIgZGVmaW5pdGlvbiBpbiBtdWx0aXBsZSBPTUFQIHBvcnRzCisgIFBhdGNoIGJ5IEhpcm9raSBLYW1pbmFnYSwgMTEgTWFyIDIwMDYKKworKiBVcGRhdGUgb21hcDU5MTJvc2sgYm9hcmQgc3VwcG9ydAorICAtIEZpeCBPTUFQIHN1cHBvcnQgdGhhdCBvbWFwNTkxMm9zayBjb21waWxlcyBpbiBjdXJyZW50IHNvdXJjZSB0cmVlCisgIC0gVXBkYXRlIHdpdGggY29kZSBmcm9tICJodHRwOi8vb21hcC5zcGVjdHJ1bWRpZ2l0YWwuY29tL29zazU5MTIiCisgICAgdG8gZml4IHByb2JsZW1zIHdpdGggRERSIGluaXRpYWxpemF0aW9uCisgIC0gRml4IHRpbWVyIHNldHVwCisgIC0gVXNlIENGSSBmbGFzaCBkcml2ZXIgYW5kIHN1cHBvcnQgY29tcGxldGUgMzJNQiBvZiBvbmJvYXJkIGZsYXNoCisgIC0gQWRkICJwcmludF9jcHVpbmZvKCkiIGFuZCAiY2hlY2tib2FyZCgpIiBmdW5jdGlvbnMgdG8gZGlzcGxheQorICAgIENQVSAod2l0aCBmcmVxdWVuY3kpIGFuZCBCb2FyZCBpbmZvcworICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEwIE1heSAyMDA2CisKKyogRml4IHdhdGNoZG9nIGlzc3VlcyBmb3IgQ29sZEZpcmUgYm9hcmRzLgorCisqIEFkZCBNNTI3MUVWQiBib2FyZCBzdXBwb3J0LgorCisqIE1ha2UgUjUyMDAgc3BlY2lmaWMgbG93IGxldmVsIGluaXRpYWxpemF0aW9uIGJvYXJkIGNvbmRpdGlvbmFsLgorCisqIFVwZGF0ZSBDUFUgdGFyZ2V0IGlkZW50aWZpY2F0aW9uIHN0cmluZ3MgZm9yIENvbGRGaXJlIGZhbWlseS4KKworKiBVcGRhdGUgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgZm9yIE1DRjUyNzEuCisKKyogRml4IHNlcmlhbCBjb25zb2xlIHN1cHBvcnQgZm9yIE1DRjUyNzEuCisKKyogRml4ZXMgZm9yIGdjYyAzLjQgYmFzZWQgbTY4ayB0b29sY2hhaW4sCisgIGJhc2VkIG9uIHBhdGNoIGJ5IEphdGUgU3VqamF2YW5pY2guCisKKyogRml4IGxvd2Jvb3Qgc3VwcG9ydCBvbiBNQ0MyMDAgYm9hcmQKKworKiBNZXJnZWQgTVBDODM0OUFEUyBhbmQgTVBDODM0OUVNRFMgcG9ydHMgaW50byBNUEM4MzQ5RU1EUyBwb3J0OgorICAtIFJlbW92ZWQgTVBDODM0OUFEUyBwb3J0CisgIC0gQWRkZWQgUENJIHN1cHBvcnQgdG8gTVBDODM0OUFEUworICAtIHJld29ya2VkIG1lbW9yeSBtYXAgdG8gYWxsb3cgbWFwcGluZyBvZiBhbGwgcmVnaW9ucyB3aXRoIEJBVHMKKyAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMjAgQXByIDIwMDYKKworKiBDb2RpbmcgU3R5bGUgY2xlYW51cAorCisqIFdyaXRlIFJUQyBzZWNvbmRzIGZpcnN0IHRvIG1haW50YWluIHNldHRpbmdzIGludGVncml0eSBwZXIKKyAgTWF4aW0vRGFsbGFzIERTMTMwNiBkYXRhIHNoZWV0LgorICBQYXRjaCBieSBBbGFuIEouIEx1c2UsIDAyIE1heSAyMDA2CisKKyogU2NoZWR1bGVkIGZvciByZW1vdmFsOiBzdHJuaWNtcCgpIHdoaWNoIGlzIHVudXNlZAorCisqIFVwZGF0ZSBmb3IgSW50ZWwgTW9uYWhhbnMgYm9hcmRzOgorICAtIHN1cHBvcnQgZm9yIG1hZ2ljIGtleSBkZXRlY3Rpb24gYW5kIGhhbmRsaW5nIG9uIGRlbHRhIGJvYXJkCisgIC0gTkFORCBzdXBwb3J0IGZvciB6eWxvbml0ZSBib2FyZCArIHNvbWUgbWlub3IgY2xlYW51cAorCisqIERlY2xhcmUgbG9hZF9zZXJpYWxfeW1vZGVtKCkgd2hlbiB1c2luZyBDRkdfQ01EX0xPQURCLgorICBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDAxIE1heSAyMDA2CisKKyogRml4ZWQgaGFuZGxpbmcgb2YgYmFkIGNoZWNrc3VtcyB3aXRoICJta2ltYWdlIC1sIgorCisqIEFkZGVkIHN1cHBvcnQgZm9yIEJDMzQ1MCBib2FyZAorICBQYXRjaCBieSBTdGVmYW4gU3Ryb2JsLCAyMSBPY3QgMjAwNQorCisqIFVwZGF0ZSBmb3IgTkM2NTAgYm9hcmQ6CisgIC0gU3VwcG9ydCByZXYxIGFuZCByZXYyIGhhcmR3YXJlCisgIC0gYWRhcHQgdG8gbmV3IE5BTkQgbGF5ZXIKKyAgLSBhZGQgQ1A4NTAgY29uZmlndXJhdGlvbiBiYXNlZCBvbiBOQzY1MAorCisqIE1QQzUyMDA6IGVuYWJsZSBzbm9vcGluZyBvZiBETUEgdHJhbnNhY3Rpb25zIG9uIFhMQiBldmVuIGlmIG5vIFBDSQorICBpcyBjb25maWd1cmVkOyBvdGhyd2lzZSBETUEgYWNjZXNzZXMgYXJlbid0IGNhY2hlIGNvaGVyZW50IHdoaWNoCisgIGNhdXNlcyBmb3IgZXhhbXBsZSBVU0IgdG8gZmFpbC4KKworKiBTb21lIGNvZGUgY2xlYW51cAorCisqIEZpeCBkYmF1MXgwMCBib2FyZHMgYnJva2VuIGJ5IGRiYXUxNTUwIHBhdGNoCisgIFBMTDpzIHdlcmUgbm90IHNldCBmb3IgYm9hcmRzIG90aGVyIHRoYW4gMTU1MC4KKyAgRmxhc2ggQ0ZJIGNhdXNlZCBjYXJkIHRvIGhhbmcgZHVlIHRvIHVuZGVmaW5lZCBDRkdfRkxBU0hfQkFOS1NfTElTVC4KKyAgRGVmYXVsdCBib290IGlzIG5vdyBib290cCBmb3IgY2FyZHMgb3RoZXIgdGhhbiAxNTUwLgorICBQYXRjaCBieSBUaG9tYXMgTGFuZ2UsIDEwIEF1ZyAyMDA1CisKKyogRml4ZXMgY29tbW9uL2NtZF9mbGFzaC5jOgorICAtIGZpeCBzb21lIGNvbXBpbGVyL3BhcnNlciBlcnJvciwgaWYgdXNpbmcgbTY4ayB0b29sIGNoYWluCisgIC0gb3B0aWNhbCBmaXggZm9yIHByb3RlY3Qgb24vb2ZmIGFsbCBtZXNzYWdlcywgaWYgdXNpbmcgbW9yZQorICAgIHRoZW4gb25lIGJhbmsKKyAgUGF0Y2ggYnkgSmVucyBTY2hhcnNpZywgMjggSnVsIDIwMDUKKworKiBGaXggUXVhZCBVQVJUIG1hcHBpbmcgb24gTUNDMjAwIGJvYXJkIGR1ZSB0byBuZXcgSFcgcmV2aXNpb24KKworKiBGaXggSkZGUzIgc3VwcG9ydCBmb3IgbGVnYWN5IE5BTkQgZHJpdmVyLgorCisqIFJlbW92ZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBEb0MgY29kZSBhbmQgb2xkIGxlZ2FjeSBOQU5EIGRyaXZlci4KKworKiBGaXggUE04MjhfUENJIHRhcmdldCwgZm9yIHdoaWNoIFBDSSB3YXMgKm5vdCogY29uZmlndXJlZCBpbi4KKworKiBGaXggTGl0ZTUyMDBCIHN1cHBvcnQ6IGluaXRpYWxpemUgU0RlbGF5IHJlZ2lzdGVyCisgIFNlZSBGcmVlc2NhbGUncyBBTjMyMjEgIk1QQzUyMDBCIFNEUkFNIEluaXRpYWxpemF0aW9uIGFuZAorICBDb25maWd1cmF0aW9uIiwgMy4zLjEgU0RlbGF5LS1NQkFSICsgMHgwMTkwCisKKyogQ2hhbmdlcy9maXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKKworICAtIEFkZCBJbnRlbCBsZWdhY3kgbG9jay91bmxvY2sgc3VwcG9ydCB0byBjb21tb24gQ0ZJIGRyaXZlcgorCisgICAgT24gc29tZSBJbnRlbCBmbGFzaCdzIChlLmcuIEludGVsIEozKSBsZWdhY3kgdW5sb2NraW5nIGlzCisgICAgc3VwcG9ydGVkLCBtZWFuaW5nIHRoYXQgdW5sb2NraW5nIG9mIG9uZSBzZWN0b3Igd2lsbCB1bmxvY2sKKyAgICBhbGwgc2VjdG9ycyBvZiB0aGlzIGJhbmsuIFVzaW5nIHRoaXMgZmVhdHVyZSwgdW5sb2NraW5nCisgICAgb2YgYWxsIHNlY3RvcnMgdXBvbiBzdGFydHVwICh2aWEgZW52IHZhciAidW5sb2NrPXllcyIpIHdpbGwKKyAgICBnZXQgbXVjaCBmYXN0ZXIuCisKKyAgLSBGaXhlZCBwcm9ibGVtIHdpdGggbXVsdGlwbGUgcmVhZHMgb2YgZW52cm9ubWVudCB2YXJpYWJsZQorICAgICJ1bmxvY2siIGFzIHBvaW50ZWQgb3V0IGJ5IFJlaW5oYXJkIEFybHQgJiBBbmRlcnMgTGFyc2VuLgorCisgIC0gUmVtb3ZlZCB1bndhbnRlZCBsaW5lZmVlZHMgZnJvbSAicHJvdGVjdCIgY29tbWFuZCB3aGVuCisgICAgQ0ZHX0ZMQVNIX1BST1RFQ1RJT04gaXMgZW5hYmxlZC4KKworICAtIENoYW5nZWQgcDNwNDAwIGJvYXJkIHRvIHVzZSBDRkdfRkxBU0hfUFJPVEVDVElPTgorCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDEgQXByIDIwMDYKKworKiBDaGFuZ2VzL2ZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgorICAtIENvcnJlY3RseSBoYW5kbGUgdGhlIGNhc2VzIHdoZXJlIENGR19IWiAhPSAxMDAwIChzZXZlcmFsCisgICAgWFNjYWxlLWJhc2VkIGJvYXJkcykKKyAgLSBGaXggdGhlIHRpbWVvdXQgY2FsY3VsYXRpb24gb2YgYnVmZmVyZWQgd3JpdGVzIChvZmYgYnkgYQorICAgIGZhY3RvciBvZiAxMDAwKQorICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAzMSBNYXIgMjAwNgorCisqIFVwZGF0ZXMgdG8gY29tbW9uIFBQQzR4eCBvbmJvYXJkIChERFIpU0RSQU0gaW5pdCBjb2RlICg0MDUgYW5kIDQ0MCkKKworICA0MDUgU0RSQU06IC0gVGhlIFNEUkFNIHBhcmFtZXRlcnMgY2FuIG5vdyBiZSBkZWZpbmVkIGluIHRoZSBib2FyZAorCSAgICAgICBjb25maWcgZmlsZSBhbmQgdGhlIDQwNSBTRFJBTSBjb250cm9sbGVyIHZhbHVlcyB3aWxsCisJICAgICAgIGJlIGNhbGN1bGF0ZWQgdXBvbiBib290dXAgKHNlZSBQUENoYW1lbGVvbkVWQikuCisJICAgICAgIFdoZW4gdGhvc2Ugc2V0dGluZ3MgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBib2FyZAorCSAgICAgICBjb25maWcgZmlsZSwgdGhlIHJlZ2lzdGVyIHNldHVwIHdpbGwgYmUgYXMgaXQgaXMgbm93LAorCSAgICAgICBzbyB0aGlzIGltcGxlbWVudGF0aW9uIHNob3VsZCBub3QgYnJlYWsgYW55IGN1cnJlbnQKKwkgICAgICAgZGVzaWduIHVzaW5nIHRoaXMgY29kZS4KKworCSAgICAgICBUaGFua3MgdG8gQW5kcmVhIE1hcnNvbiBmcm9tIERBVkUgZm9yIHRoaXMgcGF0Y2guCisKKyAgNDQwIEREUjogICAtIEFkZGVkIGZ1bmN0aW9uIHNkcmFtX3RyMV9zZXQgdG8gYXV0byBjYWxjdWxhdGUgdGhlCisJICAgICAgIFRSMSB2YWx1ZSBmb3IgdGhlIEREUi4KKwkgICAgIC0gQWRkZWQgRUNDIHN1cHBvcnQgKHNlZSBwM3A0NDApLgorCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTcgTWFyIDIwMDYKKworKiBGaXggQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVCBkZXBlbmRlbmN5IGluIGNwdS9hcm05MjB0L3N0YXJ0LlMKKyAgUGF0Y2ggYnkgUGV0ZXIgTWVuemViYWNoLCAxMyBPY3QgMjAwNSBbRE5YIzIwMDYwNDAxNDIwMDA0NzNdCisKKyogQWRkIHN1cHBvcnQgZm9yIHltb2RlbSBwcm90b2NvbCBkb3dubG9hZAorICBQYXRjaCBieSBTdGVmYW5vIEJhYmljLCAyOSBNYXIgMjAwNgorCisqIE1lbW9yeSBNYXAgVXBkYXRlIGZvciBEZWx0YSBib2FyZDogVS1Cb290IGlzIGF0IDB4ODAwMDAwMDAtMHg4NDAwMDAwMAorICBNZXJnZSBmcm9tIE1hcmt1cyBLbG90emL8Y2hlcidzIHJlcG8sIDAxIEFwciAyMDA2CisKKyogR0NDLTQueCBmaXhlczogY2xlYW4gdXAgZ2xvYmFsIGRhdGEgcG9pbnRlciBpbml0aWFsaXphdGlvbiBmb3IgYWxsCisgIGJvYXJkcworCisqIFVwZGF0ZSBmb3IgRGVsdGEgYm9hcmQ6CisgIC0gcmVkdW5kYW50IE5BTkQgZW52aXJvbm1lbnQKKyAgLSBtaXNjIE1vbmFoYW5zIGNsZWFudXBzIChyZW1vdmUgZGVhZCBjb2RlIGV0Yy4pCisgIC0gREE5MDMwIEluaXRpYWxpemF0aW9uOyBzb21lIG1pbmltYWwgY2hhbmdlcyB0byBQWEEgSTJDIGRyaXZlciB0bworICAgIG1ha2UgaXQgd29yayB3aXRoIHRoZSBNb25haGFucy4KKyAgLSBNYWtlIE1vbmFoYW5zIGNsb2NrIGZyZXF1ZW5jeSBjb25maWd1cmFibGUgdXNpbmcKKyAgICBDRkdfTU9OQUhBTlNfUlVOX01PREVfT1NDX1JBVElPIGFuZAorICAgIENGR19NT05BSEFOU19UVVJCT19SVU5fTU9ERV9SQVRJTy4KKyAgTWVyZ2UgZnJvbSBNYXJrdXMgS2xvdHpi/GNoZXIncyByZXBvLCAyNSBNYXIgMjAwNgorCisqIEVuYWJsZSBRdWFkIFVBUlQgb20gTUNDMjAwIGJvYXJkLgorCisqIENsZWFudXAgTUNDMjAwIGJvYXJkIGNvbmZpZ3VyYXRpb247IG9taXQgbm9uLWV4aXN0ZW50IHN0dWZmLgorCisqIEFkZCBzdXBwb3J0IGZvciBNUEM4NTkvODY2IFJldi4gQS4wCisKKyogQWRkIGNvbW1hbmQgZm9yIGhhbmRsaW5nIEREUiBFQ0MgcmVnaXN0ZXJzIG9uIE1QQzgzNDlFRSBNRFMgYm9hcmQuCisKKyogRml4IEREUiBFQ0MgYml0IGRlZmluaXRpb25zIGZvciBNUEM4M3h4LgorCisqIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIE1QQzgzNDlFIE1EUyBib2FyZC4KKworKiBBZGQgc3VwcG9ydCBmb3IgRUNDIEREUiBpbml0aWFsaXphdGlvbiBvbiBNUEM4M3h4LgorCisqIEFkZCBETUEgc3VwcG9ydCBmb3IgTVBDODN4eC4KKworKiBBZGQgc3luYyBpbiBkb19yZXNldCgpIHJvdXRpbmUgZm9yIE1QQzgzeHggYWZ0ZXIgUlBSIHJlZ2lzdGVyCisgIHdhcyB3cml0dGVuIHRvLiBJdCBpcyBuZWVkIG9uIHNvbWUgdGFyZ2V0cyB3aGVuIEJBVCB0cmFuc2xhdGlvbgorICBpcyBlbmFibGVkLgorCisqIEFkZCBiaXQgZGVmaW5pdGlvbnMgZm9yIE1QQzgzeHggRERSIGNvbnRyb2xsZXIgcmVnaXN0ZXJzLgorCisqIEFkZCBEY2J6KCksIERjYmkoKSBhbmQgRGNiZigpIHJvdXRpbmVzIGZvciBNUEM4M3h4LgorCisqIENvcnJlY3Qgc2hpZnQgb2Zmc2V0cyBpbiBpY2FjaGVfc3RhdHVzIGFuZCBkY2FjaGVfc3RhdHVzIGZvciBNUEM4M3h4LgorCisqIEFkZCBzdXBwb3J0IGZvciBEUzEzNzQgUlRDIGNoaXAuCisKKyogQWRkIHN1cHBvcnQgZm9yIExpdGU1MjAwQiBib2FyZC4KKyAgUGF0Y2ggYnkgIFBhdGNoIGJ5IEpvc2UgTWFyaWEgKFR4ZW1hKSBMb3BleiwgMTYgSmFuIDIwMDYKKworKiBBcHBseSBTb0MgY29uY2VwdCB0byBhcm05MjZlanMgQ1BVcywgaS5lLiBtb3ZlIHRoZSBTb0Mgc3BlY2lmaWMKKyAgdGltZXIgYW5kIGNwdV9yZXNldCBjb2RlIGZyb20gY3B1LyQoQ1BVKSBpbnRvIHRoZSBuZXcKKyAgY3B1LyQoQ1BVKS8kKFNPQykgZGlyZWN0b3JpZXMKKyAgUGF0Y2ggYnkgQW5kcmVhcyBFbmdlbCwgMTMgTWFyIDIwMDYKKworKiBDaGFuZ2UgbWF4IHNpemUgb2YgdW5jb21wcmVzc2VkIHVJbWFnZSdzIHRvIDhNQnl0ZSBhbmQgYWRkCisgIENGR19CT09UTV9MRU4gdG8gYWRqdXN0IHRoaXMgc2V0dGluZy4KKworICBBcyBtZW50aW9uZWQgYnkgUm9iaW4gR2V0eiBvbiAyMDA1LTA1LTI0IHRoZSBzaXplIG9mIHVuY29tcHJlc3NlZAorICB1SW1hZ2VzIHdhcyByZXN0cmljdGVkIHRvIDRNQnl0ZXMuIFRoaXMgZGVmYXVsdCBzaXplIGlzIG5vdworICBpbmNyZWFzZWQgdG8gOE1ieXRlcyBhbmQgY2FuIGJlIG92ZXJyaWRlZCBieSBzZXR0aW5nIENGR19CT09UTV9MRU4KKyAgaW4gdGhlIGJvYXJkIGNvbmZpZyBmaWxlLgorCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTMgTWFyIDIwMDYKKworKiBGaXggcHJvYmxlbSB3aXRoIHVwZGF0ZWQgUENJIGNvZGUgaW4gY3B1L3BwYzR4eC80MDVncF9wY2kuYworICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEzIE1hciAyMDA2CisKKyogY3B1L3BwYzR4eC9zdGFydC5TIDogZXhjZXB0aW9ucyBhcmUgZW5hYmxlZCBhZnRlciByZWxvY2F0aW9uCisgIFBhdGNoIGJ5IENlZHJpYyBWaW5jZW50LCAwNiBKdWwgMjAwNQorCisqIGF1MXgwMF9ldGguYzogY2hlY2sgbWFsbG9jIHJldHVybiB2YWx1ZSBhbmQgYWJvcnQgaWYgaXQgZmFpbGVkCisgIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAyNiBKdWwgMjAwNQorCisqIENoYW5nZSB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGluIHNvZnRfaTJjLmM6c2VuZF9hY2soKSB0byBrZWVwIGZyb20KKyAgaW5jb3JyZWN0bHkgZ2VuZXJhdGluZyBzdGFydC9zdG9wIGNvbmRpdGlvbnMgb24gdGhlIGJ1cy4KKyAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI2IEp1bCAyMDA1CisKKyogRml4IGJ1ZyBpbiBbaWRdY2FjaGVfc3RhdHVzIGNvbW1hbmRzIGZvciBNUEM4NXh4IHByb2Nlc3NvcnM7CisgIHNob3VsZCBsb29rIGF0IExTQiBvZiBMMUNTUm4gcmVnaXN0ZXJzIHRvIGRldGVybWluZSBpZiBMMSBjYWNoZSBpcworICBlbmFibGVkLCBub3QgdGhlIE1TQi4KKyAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMTkgSnVsIDIwMDUKKworKiBGaXggYXJyYXkgb3ZlcmZsb3cgd2l0aCBmd19zZXRlbnYgb24gdW5pbml0aWFsaXNlZCBlbnZpcm9ubWVudAorICBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAxNSBKdWwgMjAwNQorCisqIEFkZCBzdXBwb3J0IGZvciBFbWJlZGRlZFBsYW5ldCBFUDg4eCBib2FyZHMKKyAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTMgSnVsIDIwMDUKKworKiBSZW1vdmUgYm9hcmQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBmcm9tIHRoZSBjb21tb24geGlsaW54CisgIGV0aGVybmV0IGFuZCBpaWMgYWRhcHRlciBjb2RlLgorICBQYXRjaCBieSBNaWNoYWVsIExpYmVza2luZCwgMTIgSnVsIDIwMDUKKworKiBBZGQgTmF0IFNlbWkgRFA4Mzg2NSBQSFkgc3VwcG9ydCB0byBNUEM4NXh4IFRTRUMgZHJpdmVyCisgIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDA4IEp1bCAyMDA1CisKKyogQWRkIChzb21lKSBkZWZpbml0aW9ucyBmb3IgdGhlIE1QQzg1eHggbG9jYWwgYnVzIGNvbnRyb2xsZXIKKyAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMDggSnVsIDIwMDUKKworKiBBZGQgQ1BNMiBJL08gcGluIGZ1bmN0aW9ucyBmb3IgTVBDODV4eCBwcm9jZXNzb3JzCisgIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDA4IEp1bCAyMDA1CisKKyogRml4IGNvbXBpbGUgcHJvYmxlbQorCisqIEFkZGVkIFBDSSBzdXBwb3J0IGZvciBNUEM4MzQ5QURTIGJvYXJkCisgIFBhdGNoIGJ5IEt1bWFyIEdhbGEgMTEgSmFuIDIwMDYKKworKiBFbmFibGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBvbiBNUEM4M3h4CisgIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDEwIEZlYiAyMDA2CisKKyogRGVjb3B1bGVkIHNldHRpbmcgb2YgT1IvQlIgYW5kIExCTEFXQkFSL0xCTEFXQVIgb24gTVBDODN4eAorICBQYXRjaCBieSBLdW1hciBHYWxhLCAyNSBKYW4gMjAwNgorCisqIEZpeGVkIGRlZmluZXMgZm9yIE1QQzgzeHggU0lDUkwgcmVnaXN0ZXIgdG8gbWF0Y2ggY3VycmVudCBzcGVjcworICBQYXRjaCBieSBLdW1hciBHYWxhLCAyMyBKYW4gMjAwNgorCisqIE9ubHkgZGlzYWJsZSB0aGUgTVBDODN4eCB3YXRjaGRvZyBpZiBpdHMgZW5hYmxlZCBvdXQgb2YgcmVzZXQuCisgIElmIGl0cyBkaXNhYmxlZCBvdXQgb2YgcmVzZXQgU1cgY2FuIGxhdGVyIGVuYWJsZSBpdCBpZiBzbyBkZXNpcmVkCisgIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CisKKyogQWxsb3cgY29uZmlnIG9mIEdQSU8gZGlyZWN0aW9uICYgZGF0YSByZWdpc3RlcnMgYXQgYm9vdCBvbiA4M3h4CisgIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CisKKyogRW5hYmxlIHRpbWUgaGFuZGxpbmcgb24gODN4eAorICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgorCisqIE1ha2UgU3lzdGVtIElPIENvbmZpZyBSZWdpc3RlcnMgYm9hcmQgY29uZmlndXJhYmxlIG9uIE1QQzgzeHgKKyAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKKworKiBGaXhlZCBQQ0kgaW5kaXJlY3QgY29uZmlnIG9wcyB0byBoYW5kbGUgbXVsdGlwbGUgUENJIGNvbnRyb2xsZXJzCisgIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBidXMgbnVtYmVyIHdlIGFyZSB0cnlpbmcgdG8gYWNjZXNzIGJhc2VkCisgIG9uIHdoaWNoIFBDSSBjb250cm9sbGVyIGl0cyBvbgorICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMiBKYW4gMjAwNgorCisqIFJlcG9ydCBiYWNrIFBDSSBidXMgd2hlbiBkb2luZyB0YWJsZSBiYXNlZCBkZXZpY2UgY29uZmlnCisgIFBhdGNoIGJ5IEt1bWFyIEdhbGEsIDExIEphbiAyMDA2CisKKyogQWRkZWQgc3VwcG9ydCBmb3IgUENJIHByZWZldGNoYWJsZSByZWdpb24gYW5kIEJBUnMKKyAgSWYgYSBob3N0IGNvbnRyb2xsZXIgc2V0cyB1cCBhIHJlZ2lvbiBhcyBwcmVmZXRjaGFibGUgYW5kCisgIGEgZGV2aWNlJ3MgQkFSIGRlbm90ZXMgaXQgYXMgcHJlZmV0Y2hhYmxlLCBhbGxvY2F0ZSB0aGUKKyAgQkFSIGludG8gdGhlIHByZWZldGNoIHJlZ2lvbi4KKworICBJZiBhIEJBUiBpcyBwcmVmZXRjaGFibGUgYW5kIG5vIHByZWZldGNoYWJsZSByZWdpb24gaGFzCisgIGJlZW4gc2V0dXAgYnkgdGhlIGNvbnRyb2xsZXIgd2UgZmFsbCBiYWNrIHRvIGFsbG9jYXRpbmcKKyAgdGhlIEJBUiBpbnRvIHRoZSBub3JtYWxseSBtZW1vcnkgcmVnaW9uLgorICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgorCisqIEFkZCBoZWxwZXIgZnVuY3Rpb24gZm9yIGdlbmVyaWMgZmxhdCBkZXZpY2UgdHJlZSBmaXh1cHMgZm9yIG1wYzgzeHgKKyAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKKworKiBBZGQgc3VwcG9ydCBmb3IgcGFzc2luZyBpbml0cmQgaW5mb3JtYXRpb24gdmlhIGZsYXQgZGV2aWNlIHRyZWUKKyAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKKworKiBBZGRlZCBPRl9TVERPVVRfUEFUSCBhbmQgT0ZfU09DCisKKyAgT0ZfU1RET1VUX1BBVEggc3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBkZXZpY2UgdGhlIGtlcm5lbCBjYW4gdXNlCisgIGZvciBjb25zb2xlIG91dHB1dAorCisgIE9GX1NPQyBzcGVjaWZpZXMgdGhlIHByb3BlciBuYW1lIG9mIHRoZSBTT0Mgbm9kZSBpZiBvbmUgZXhpc3RzLgorICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgorCisqIEFsbG93IGJvYXJkIGNvZGUgdG8gZml4dXAgdGhlIGZsYXQgZGV2aWNlIHRyZWUgYmVmb3JlIGJvb3RpbmcgYSBrZXJuZWwKKyAgUGF0Y2ggYnkgS3VtYXIgR2FsYSwgMTEgSmFuIDIwMDYKKworKiBBZGRlZCBDT05GSUdfIG9wdGlvbnMgZm9yIGJkX3QgYW5kIGVudiBpbiBmbGF0IGRldiB0cmVlCisKKwlDT05GSUdfT0ZfSEFTX0JEX1Qgd2lsbCBwdXQgYSBjb3B5IG9mIHRoZSBiZF90CisJaW50byB0aGUgcmVzdWx0aW5nIGZsYXQgZGV2aWNlIHRyZWUuCisKKwlDT05GSUdfT0ZfSEFTX1VCT09UX0VOViB3aWxsIGNvcHkgdGhlIGVudmlyb25tZW50CisJdmFyaWFibGVzIGZyb20gdS1ib290IGludG8gdGhlIGZsYXQgZGV2aWNlIHRyZWUKKworICBQYXRjaCBieSBLdW1hciBHYWxhLCAxMSBKYW4gMjAwNgorCisqIEFkZCBzdXBwb3J0IGZvciB0aGUgREhDUCB2ZW5kb3Igb3B0aW9uYWwgYm9vdGZpbGUgKCM2NykuCisgIElnbm9yZXMgdGhlIHZlbmRvciBURlRQIHNlcnZlciBuYW1lIG9wdGlvbiAoIzY2KS4KKyAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMzAgSnVuIDIwMDUKKworKiBGaXggYSBIVyB0aW1pbmcgaXNzdWUgb24gODU0OCBDRFMgZm9yIGVUU0VDIDMgaW4gUkdNSUkgbW9kZQorICBQYXRjaCBieSBBbmR5IEZsZW1pbmcsIDE0IEp1biAyMDA1CisKKyogRml4IGJhZCByZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgTFRYOTcxIFBIWSBvbiBNUEM4NXh4IGJvYXJkcy4KKyAgUGF0Y2ggYnkgR2VyaGFyZCBKYWVnZXIsIDIxIEp1biAyMDA1CisKKyogQWRkIG5ldGNvbnNvbGUgYW5kIHNvbWUgbW9yZSBjb21tYW5kcyB0byBSUFhsaXRlX0RXIGJvYXJkCisgIFBhdGNoIGJ5IFNhbSBTb25nLCAxOSBKdW4gMjAwNQorCisqIEZpeCBiYWQgZGVjbGFyYXRpb24gb24gcGNpX2NmZ2Z1bmNfbm90aGluZworICBQYXRjaCBieSBTYW0gU29uZywgMTkgSnVuIDIwMDUKKworKiBBZGp1c3QgImVjaG8iIGFzIGEgZGVmYXVsdCBjb21tYW5kCisgIFBhdGNoIGJ5IFNhbSBTb25nLCAxOSBKdW4gMjAwNQorCisqIEZpeCBQQ0lERiBjYWxjdWxhdGlvbiBpbiBjcHUvbXBjODI2MC9zcGVlZC5jIGZvciBNUEM4MjgwRUMKKyAgUGF0Y2ggYnkgS29rSG93IFRlaCwgMTYgSnVuIDIwMDUKKworKiBBZGQgY3JjIG9mIGRhdGEgdG8gamZmczIgKGluIGpmZnMyXzFwYXNzX2J1aWxkX2xpc3RzKCkpLgorICBQYXRjaCBieSBSaWNrIEJyb25zb24sIDE1IEp1biAyMDA1CisKKyogQ29kaW5nIFN0eWxlIGNsZWFudXAKKworKiBBdm9pZCBkZXJlZmVyZW5jaW5nIE5VTEwgaW4gZmluZF9jbWQoKSBpZiBubyB2YWxpZCBjb21tYW5kcyB3ZXJlIGZvdW5kCisgIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxMyBKdW4gMjAwNQorCisqIEFkZCBBREkgQmxhY2tmaW4gc3VwcG9ydAorICAtIGFkZCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBCbGFja2ZpbiBCRjUzMyBDUFUKKyAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEFESSBCRjUzMyBTdGFtcCB1Q2xpbnV4IGJvYXJkCisgIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBBREkgQkY1MzMgRVpLaXQgYm9hcmQKKyAgUGF0Y2hlcyBieSBSaWNoYXJkIEtsaW5nbGVyLCAxMSBKdW4gMjAwNQorCisqIEFkZCBsb2FkcyBvZiBudG9obCgpIGluIGltYWdlIGhlYWRlciBoYW5kbGluZworICBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMCBKdW4gMjAwNQorCisqIFN3aXRjaCBNUEM4NnhBRFMgYW5kIE1QQzg4NUFEUyBib2FyZHMgdG8gdXNlIGNwdWNsayBlbnZpcm9ubWVudAorICB2YXJpYWJsZSB0byBzZXQgY2xvY2sKKyAgUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDUgSnVuIDIwMDUKKworKiBSUFhsaXRlIGNvbmZpZ3VyYXRpb24gZml4ZXMKKyAgLSBVc2UgY29ycmVjdCBmbGFzaCBzZWN0b3Igc2l6ZQorICAtIFVzZSBjb3JyZWN0IG1lbW9yeSB0ZXN0IGVuZCBhZGRyZXNzCisgIC0gQWRkIHN1cHBvcnQgZm9yIGJ6aXAyIGNvbXByZXNzaW9uCisgIC0gVmFyaW91cyBzbWFsbCBmaXhlcworICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwNSBKdW4gMjAwNQorCisqIE1lbW9yeSBjb25maWd1cmF0aW9uIGNoYW5nZXMgZm9yIFpQQy4xOTAwIGJvYXJkCisgIC0gRml4IFNEUkFNIHRpbWluZyBvbiBib3RoIGxvY2FsIGJ1cyBhbmQgNjB4IGJ1cworICAtIEFkZCBzdXBwb3J0IGZvciBzZWNvbmQgZmxhc2ggYmFuayAoU0lNTSkKKyAgLSBDaGFuZ2UgYm9vdCBmbGFzaCBiYXNlCisgIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA1IEp1biAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIEFkZGVyIGJvYXJkcyB3aXRoIDE2TUIgU0RSQU07CisgIGFkZCBzdXBwb3J0IGZvciBzZWNvbmQgRkVDIG9uIEFkZGVyODd4IGJvYXJkLgorICBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwNSBKdW4gMjAwNQorCisqIEZpeCBjb25kaXRpb25hbCBmb3IgaW5jbHVkaW5nIGtzODY5NWV0aCBkcml2ZXIKKyAgUGF0Y2ggYnkgR3JlZyBVbmdlcmVyLCAwNCBKdW4gMjAwNQorCisqIEZpeCBNYWtlZmlsZTogaW5jbHVkZSBjb25maWcubWsgb25seSBhZnRlciBDUk9TU19DT01QSUxFIGlzIGRlZmluZWQKKyAgUGF0Y2ggYnkgRnJpZWRyaWNoIExvYmVuc3RvY2ssIDAyIEp1biAyMDA1CisKKyogRml4IGNvbW1lbnQgaW4gY29tbW9uL3NvZnRfaTJjLmMKKyAgUGF0Y2hlcyBieSBQZXRlciBLb3JzZ2FhcmQvVG9sdW5heSBPcmt1biwgMjYgTWF5IDIwMDUKKworKiBDbGVhbnVwIGNvbXBpbGVyIHdhcm5pbmdzLgorICBQYXRjaCBieSBHcmVnIFVuZ2VyZXIsIDIxIE1heSAyMDA1CisKKyogV29yZCBhbGlnbm1lbnQgZml4ZXMgZm9yIHdvcmQgYWxpZ25lZCBOUzE2NTUwIFVBUlQKKyAgUGF0Y2ggYnkgSmVhbi1QYXVsIFNhbWFuLCAwMSBNYXIgMjAwNQorCisgIEZpeGVzIGJ1ZyB3aXRoIFVBUlQgdGhhdCBvbmx5IHN1cHBvcnRzIHdvcmQgYWxpZ25lZCBhY2Nlc3M6IHJlbW92ZWQKKyAgIl9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsiIGZvciAiKENGR19OUzE2NTUwX1JFR19TSVpFID09IDQpIiBzb21lCisgIChicm9rZW4hKSB2ZXJzaW9ucyBvZiBHQ0MgZ2VuZXJhdGUgYnl0ZSBhY2Nlc3NlcyB3aGVuIGVuY291bnRlcmluZworICB0aGUgcGFja2VkIGF0dHJpYnV0ZSByZWdhcmRsZXNzIGlmIHRoZSBzdHJ1Y3QgaXMgYWxyZWFkeSBjb3JyZWN0bHkKKyAgYWxpZ25lZCBmb3IgYSBwbGF0Zm9ybS4gUGVyaXBoZXJhbHMgdGhhdCBjYW4gb25seSBoYW5kbGUgd29yZAorICBhbGlnbmVkIGFjY2VzcyB3b24ndCB3b3JrIHByb3Blcmx5IHdoZW4gYWNjZXNzZWQgd2l0aCBieXRlIGFjY2Vzcy4KKyAgVGhlIHN0cnVjdCBOUzE2NTUwIGlzIGFscmVhZHkgd29yZCBhbGlnbmVkIGZvciBSRUdfU0laRSA9IDQsIHNvCisgIHRoZXJlIGlzIG5vIG5lZWQgdG8gcGFja2VkIHRoZSBzdHJ1Y3QgaW4gdGhhdCBjYXNlLgorCisqIEZpeCBiZWhhdmlvdXIgaWYgZ2F0ZXdheWlwIGlzIG5vdCBzZXQKKyAgUGF0Y2ggYnkgUm9iaW4gR2lsa3MsIDIzIERlYyAyMDA0CisKKyogRml4IGNsZWFudXAgZm9yIG5ldHN0YXJ0IGJvYXJkLgorICBSZW1vdmUgYnVpbGQgcmVzdWx0cyBmcm9tIHJlcG9zaXRvcnkKKworKiBTb21lIGNvZGUgY2xlYW51cCBmb3IgR0NDIDQueAorCisqIEZpeGVzIHRvIHN1cHBvcnQgZW52aXJvbm1lbnQgaW4gTkFORCBmbGFzaDsKKyAgZW5hYmxlIE5BTkQgZmxhc2ggYmFzZWQgZW52aXJvbm1lbnQgZm9yIGRlbHRhIGJvYXJkLgorCisqIEFkZCBzdXBwb3J0IGZvciBJbnRlbCBNb25haGFucyBDUFUgb24gWnlsb25pdGUgYW5kIERlbHRhIGJvYXJkcworICAoVGhpcyBpcyBXb3JrIGluIFByb2dyZXNzISkKKworKiBBZGQgc3VwcG9ydCBmb3IgVFFNODI2MC1BSSBib2FyZHMuCisKKyogTWlub3IgY29kZSBjbGVhbnVwCisKKyogTWVyZ2UgdGhlIG5ldyBOQU5EIGNvZGUgKHRlc3RpbmctTkFORCBicmFjaCk7IHNlZSBkb2MvUkVBRE1FLm5hbmQKKyAgUmV3cml0ZSBvZiBOQU5EIGNvZGUgYmFzZWQgb24gd2hhdCBpcyBpbiAyLjYuMTIgTGludXgga2VybmVsCisgIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAyOSBKdW4gMjAwNQorCisqIEFkZCBsb3dib290IHRhcmdldCB0byBtY2MyMDAgYm9hcmQKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA0IE1hciAyMDA2CisKKyogRml4IHByb2JsZW0gd2l0aCBmbGFzaF9nZXRfc2l6ZSgpIGZyb20gQ0ZJIGRyaXZlciB1cGRhdGUKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxIE1hciAyMDA2CisKKyogTWFrZSBDRkdfTk9fRkxBU0ggd29yayBvbiBBUk0gc3lzdGVtcworICBQYXRjaCBieSBNYXJrdXMgS2xvdHpidWVjaGVyLCAyNyBGZWIgMjAwNgorCisqIFVwZGF0ZSBtY2MyMDAgY29uZmlnOiBEaXNhYmxlIFBDSSBhbmQgRG9DLCB1c2UgMTMzIE1IeiBJUEIgY2xvY2ssCisgIHVzZSBodXNoIHNoZWxsLgorCisqIENvbnZlcnQgbWNjMjAwIHRvIHVzZSBjb21tb24gQ0ZJIGZsYXNoIGRyaXZlcgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI4IEZlYiAyMDA2CisKKyogQWRkIGVudi12YXJpYWJsZSAidW5sb2NrIiB0byBoYW5kbGUgaW5pdGlhbCBzdGF0ZSBvZiBzZWN0b3JzCisgIChsb2NrZWQvdW5sb2NrZWQpLgorCisgIE9ubHkgdGhlIFUtQm9vdCBpbWFnZSBhbmQgaXQncyBlbnZpcm9ubWVudCBpcyBwcm90ZWN0ZWQsCisgIGFsbCBvdGhlciBzZWN0b3JzIGFyZSB1bnByb3RlY3RlZCAodW5sb2NrZWQpIGlmIGZsYXNoCisgIGhhcmR3YXJlIHByb3RlY3Rpb24gaXMgdXNlZCAoQ0ZHX0ZMQVNIX1BST1RFQ1RJT04pIGFuZAorICB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgInVubG9jayIgaXMgc2V0IHRvICJ5ZXMiLgorCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjggRmViIDIwMDYKKworKiBVcGRhdGUgZHJpdmVycy9jZmlfZmxhc2guYzoKKyAgLSBmaW5kX3NlY3RvcigpIGNhbGxlZCBpbiBib3RoIHZlcnNpb25zIG9mIGZsYXNoX3dyaXRlX2NmaXdvcmQoKQorICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDI3dGggRmViIDIwMDYKKworKiBDRkkgc3VwcG9ydCBmb3IgYSB4OC94MTYgQU1EL1NwYW5zaW9uIGZsYXNoIGNvbmZpZ3VyZWQgaW4geDggbW9kZQorICBQYXRjaCBieSBKb3NlIE1hcmlhIExvcGV6LCAxNiBKYW4gMjAwNgorCisqIEFkZCBzdXBwb3J0IGZvciBBTUQvU3BhbnNpb24gRmxhc2hlcyBpbiBmbGFzaF93cml0ZV9jZmlidWZmZXIKKyAgUGF0Y2ggYnkgQWxleCBCYXN0b3MgYW5kIFRob21hcyBTY2hhZWZlciwgMjAwNS0wOC0yOQorCisqIENoYW5nZXMvZml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CisgIFdlICpzaG91bGQqIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZXJyb3IgYml0cyBpZiB0aGUgcHJldmlvdXMgY2FsbAorICByZXR1cm5lZCBFUlJfT0sgKE90aGVyd2lzZSB3ZSB3aWxsIGhhdmUgb3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgaW4KKyAgZmxhc2hfc3RhdHVzX2NoZWNrKCkgYWxyZWFkeS4pICBUaGUgb3JpZ2luYWwgY29kZSB3b3VsZCBvbmx5IGNoZWNrIGZvcgorICBlcnJvciBiaXRzIGlmIGZsYXNoX3N0YXR1c19jaGVjaygpIHJldHVybnMgRVJSX1RJTUVPVVQuCisgIFBhdGNoIGJ5IE1hcmN1cyBIYWxsLCAyMyBBdWcgMjAwNQorCisqIENoYW5nZXMvZml4ZXMgZm9yIGRyaXZlcnMvY2ZpX2ZsYXNoLmM6CisgIC0gQWRkIENGR19GTEFTSF9QUk9URUNUX0NMRUFSIG9uIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKKyAgLSBQcm9oaWJpdCBidWZmZXIgd3JpdGUgd2hlbiBidWZmZXJfc2l6ZSBpcyAxIG9uIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKKyAgUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAxOSBBdWcgMjAwNQorCisqIEZpeGVzIGZvciBkcml2ZXJzL2NmaV9mbGFzaC5jOgorICAtIEZpeCB3cm9uZyB0aW1lb3V0IHZhbHVlIHVzYWdlIGluIGZsYXNoX3N0YXR1c19jaGVjaygpCisgIC0gUm91bmQgd3JpdGVfdG91dCB1cCB3aGVuIGNvbnZlcnRpbmcgdG8gbXNlYyBpbiBmbGFzaF9nZXRfc2l6ZSgpCisgIC0gUmVtb3ZlIGNsZWFyaW5nIGZsYXNoIHN0YXR1cyBhdCB0aGUgZW5kIG9mIGZsYXNoX3dyaXRlX2NmaWJ1ZmZlcigpCisgICAgd2hpY2ggc2V0cyBJbnRlbCAyOEY2NDBKMyBmbGFzaCBiYWNrIHRvIGNvbW1hbmQgbW9kZSBvbiBDU0I0NzIKKyAgUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMDIgSnVseSAyMDA1CisKKyogQWRkIGJhc2ljIHN1cHBvcnQgZm9yIHRoZSBTTU1BQ080IEJvYXJkIGZyb20gUGFuRGFDb20uCisgIFBhdGNoIGJ5IEhlaWtvIFNjaG9jaGVyLCAyMCBGZWIgMjAwNgorCisqIEFkZCBHSVQgdmVyc2lvbiBpbmZvcm1hdGlvbiAoY29tbWlkIElEKSB0byB1bnRhZ2dlZCBVLUJvb3QgdmVyc2lvbnMKKworICBBcyBkb25lIGluIHRoZSBsaW51eCBrZXJuZWwsIHRoZSBVLUJvb3QgdmVyc2lvbiAoVV9CT09UX1ZFUlNJT04pCisgIG9mIGFsbCB1bnJlbGVhc2VkICh1bnRhZ2dlZCkgVS1Cb290IGltYWdlcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKKyAgZXh0ZW5kZWQgdXBvbiBjb21waWxldGltZSB3aXRoIGEgcGFydCBvZiB0aGUgR0lUIGNvbW1pdCBJRCBhbmQKKyAgcG9zc2libHkgd2l0aCAiZGlydHkiIGlmIHVuY29tbWl0ZWQgY2hhbmdlcyBhcmUgZGV0ZWN0ZWQuCisKKyAgSGVyZSBhbiBleGFtcGxlIGZvciB0aGUgcmVzdWx0aW5nIHZlcnNpb246CisgICJVLUJvb3QgMS4xLjQtZzM0NTdhYzE4LWRpcnR5IgorCisgIFRoZSB2ZXJzaW9uIGlzIG5vdyBtYWludGFpbmVkIGluIHRoZSB0b3BsZXZlbCBNYWtlZmlsZSBhbmQgdGhlCisgIHZlcnNpb24gaGVhZGVycyBhcmUgYXV0b2dlbmVyYXRlZC4KKworICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDkgRmViIDIwMDYKKworKiBVcGRhdGUgZGVmYXVsdCBlbnZpcm9ubWVudCBmb3IgSU5LQTR4MDAgYm9hcmQuCisKKyogQ29udmVydCBDUENJNzUwIHRvIHVzZSBjb21tb24gQ0ZJIGZsYXNoIGRyaXZlcgorICBQYXRjaCBieSBSZWluaGFyZCBBcmx0LCA4IEZlYiAyMDA2CisKKyogVmFyaW91cyBjaGFuZ2VzIHRvIGVzZCBISDQwNSBib2FyZCBzcGVjaWZpYyBmaWxlcworICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMDcgRmViIDIwMDYKKworKiBDbGVhbnVwIFUtQm9vdCBib290IG1lc3NhZ2VzIG9uIEFSTS4KKworICBUbyBtYXRjaCB0aGUgVS1Cb290IHVzZXIgaW50ZXJmYWNlIG9uIEFSTSBwbGF0Zm9ybXMgdG8gdGhlIFUtQm9vdAorICBzdGFuZGFyZCAoYXMgb24gUFBDIHBsYXRmb3JtcyksIHNvbWUgbWVzc2FnZXMgd2l0aCBkZWJ1ZyBjaGFyYWN0ZXIKKyAgYXJlIHJlbW92ZWQgZnJvbSB0aGUgZGVmYXVsdCBVLUJvb3QgYnVpbGQuCisgIEVuYWJsZSBERUJVRyBmb3IgbGliX2FybS9ib2FyZC5jIHRvIGVuYWJsZSBkZWJ1ZyBtZXNzYWdlcy4KKyAgTmV3IENPTkZJR19ESVNQTEFZX0NQVUlORk8gYW5kIENPTkZJR19ESVNQTEFZX0JPQVJESU5GTyBvcHRpb25zLgorICBQYXRjaAkgYnkgU3RlZmFuIFJvZXNlLCAyNCBKYW4gMjAwNgorCisqIEZpeCB2YXJpb3VzIGNvbXBpbGVyIHdhcm5pbmdzIG9uIHBwYzR4eCBidWlsZHMgKEVMREsgNC4wKQorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IEphbiAyMDA2CisKKyogQWRkIFZHQSBzdXBwb3J0IChDVDY5MDAwKSB0byBDUENJNzUwIGJvYXJkLgorICBJbnNlcnQgbWlzc2luZyBfX2xlMzJfdG9fY3B1KCkgZm9yIGZpbGVzaXplIGluIGV4dDJmc19yZWFkX2ZpbGUoKS4KKyAgUGF0Y2ggYnkgUmVpbmhhcmQgQXJsdCwgMzAgRGVjIDIwMDUKKworKiBQTUM0MDUgYW5kIENQQ0k0MDU6IE1vdmVkIGNvbmZpZ3VyYXRpb24gb2YgcGNpIHJlc291cmNlcworICBpbnRvIGNvbmZpZyBmaWxlLgorICBQTUM0MDUgYW5kIENQQ0kyRFA6IEFkZGVkIGZpcm13YXJlIGRvd25sb2FkIGFuZCBib290aW5nIHZpYSBwY2kuCisgIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyMCBEZWMgMjAwNQorCisqIEFkZCBDb2xkRmlyZSB0YXJnZXRzIHRvIE1BS0VBTEwgc2NyaXB0CisgIFBhdGNoIGJ5IFphY2hhcnkgTGFuZGF1LCAyNiBKYW4gMjAwNgorCisqIEFkZCBzdXBwb3J0IGZvciByNTIwMCBib2FyZAorICBQYXRjaCBieSBaYWNoYXJ5IExhbmRhdSwgMjYgSmFuIDIwMDYKKworKiBBZGQgc3VwcG9ydCBmb3IgRnJlZXNjYWxlIE01MjcxIHByb2Nlc3NvcgorICBQYXRjaCBieSBaYWNoYXJ5IExhbmRhdSwgMjYgSmFuIDIwMDYKKworKiBGaXggMjhGMjU2SjNBIHN1cHBvcnQgb24gUE01MjAgYm9hcmQKKyAgKHdpdGhvdXQgYmFuay1zd2l0Y2hpbmcgb25seSAzMiBNQiBjYW4gYmUgYWNjZXNzZWQpCisKKyogRml4IG1raW1hZ2UgYnVnIHdpdGggbXVsdGlmaWxlIGltYWdlcyBjcmVhdGVkIG9uIDY0IGJpdCBzeXN0ZW1zLgorCisqIEFkZCBzdXBwb3J0IGZvciAyOEYyNTZKM0EgZmxhc2ggKD0+IDY0IE1CKSBvbiBQTTUyMCBib2FyZAorCisqIEZpeCBjb21waWxlciBwcm9ibGVtIHdpdGggYXQ5MXJtOTIwMGRrIGJvYXJkLgorICBQYXRjaCBieSBFdWdlbiBCaWd6LCAxOSBEZWMgMjAwNQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMS4xLjQ6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogQ2hhbmdlcyB0byBZZWxsb3dzdG9uZSAmIFlvc2VtaXRlIDQ0MEVQL0dSIGV2YWwgYm9hcmRzOgorICAtIENoYW5nZWQgR1BJTyBzZXR1cCB0byBlbmFibGUgYW5vdGhlciBhZGRyZXNzIGxpbmUgaW4gb3JkZXIgdG8KKyAgICBhZGRyZXNzIDY0TSBvZiBGTEFTSC4KKyAgLSBBZGRlZCBmdW5jdGlvbiBzZHJhbV90cjFfc2V0IHRvIGF1dG8gY2FsY3VsYXRlIHRoZSB0cjEgdmFsdWUgZm9yCisgICAgdGhlIEREUi4KKyAgUGF0Y2ggYnkgU3RldmVuIEJsYWtlc2xlZSwgMTIgRGVjIDIwMDUKKworKiBNUEM1MjAwOiAgU2V0IFBDSSByZXRyeSBjb3VudGVyIHRvIDAgPSBpbmZpbml0ZSByZXRyeTsKKyAgVGhlIGRlZmF1bHQgb2YgMjU1IGlzIHRvbyBzaG9ydCBmb3Igc2xvdyBkZXZpY2VzLgorICBQYXRjaCBieSBNYXJ0aW4gTnlrb2R5bSwgMTIgRGVjIDIwMDUKKworKiBDaGFuZ2UgcG9ydCBjb25maWd1cmF0aW9uIGZvciBPMkROVCAoQ09ERUMxIG9uIFBTQzEpLgorCisqIEZpeCByZWdpc3RlciBmb3IgUENJIGFzeW5jIG1vZGUgb24gUFBDNDQwRVAKKyAgUGF0Y2ggYnkgWW91bmdjaHVsIEJhbmcsIDA4IERlYyAyMDA1CisKKyogRml4IFUtQm9vdCBsaW5raW5nIHByb2JsZW1zIChhZGQgLmVoX2ZyYW1lIHNlZ21lbnQgdG8gbGlua2VyIHNjcmlwdCkKKyAgVGhpcyBzZWdtZW50IG1heSBiZSByZXF1aXJlZCBieSBzb21lIGxpYmdjYy5hIGZ1bmN0aW9ucworICAobGlrZSBfdWRpdmRpMykuCisKKyogRml4IERQUkFNIG9mZnNldC9zaXplIGZvciBNUEM4NTQxLzg1NTUuCisgIFNpbXBsaWZ5IFRRTTg1eHggTWFrZWZpbGUgaGFuZGxpbmcuCisKKyogRml4IGRhdGEgb3ZlcmZsb3cgKHR5cG8/KSBpbiBydGMvZHMxMzAyLmMKKworKiBGaXggVS1Cb290IGNvbXBpbGF0aW9uIGZvciBNSVBTIGJvYXJkcyB1c2luZyBFTERLIDQuMAorCisqIEFkZCBzdXBwb3J0IGZvciBUUU04NTQxLzg1NTUgYm9hcmRzLCBUUU04NXh4IHN1cHBvcnQgcmV3b3JrZWQ6CisgIC0gU3VwcG9ydCBmb3IgVFFNODU0MS84NTU1IGJvYXJkcyBhZGRlZC4KKyAgLSBDb21wbGV0ZSByZXdvcmsgb2YgVFFNODU0MC84NTYwIHN1cHBvcnQuCisgIC0gQ29tbW9uIFRRTTg1eHggY29kZSBub3cgc3VwcG9ydHMgYWxsIGN1cnJlbnQgVFFNODV4eCBwbGF0Zm9ybXMKKyAgICAoVFFNODU0MC84NTQxLzg1NTUvODU2MCkuCisgIC0gRERSIFNEUkFNIHNpemUgZGV0ZWN0aW9uIGFkZGVkLgorICAtIENBUyBsYXRlbmN5IGRlZmF1bHQgdmFsdWVzIGNhbiBiZSBvdmVyd3JpdHRlbiBieSBzZXR0aW5nICJzZXJpYWwjIgorICAgIHRvIGUuZy4gIkFCQzAwMDEgY2FzbD0yNSIgLT4gQ0FTIGxhdGVuY3kgMi41IHdpbGwgYmUgdXNlZC4KKyAgICBJZiBwcm9ibGVtcyBhcmUgZGV0ZWN0ZWQgd2l0aCB0aGlzIG5vbiBkZWZhdWx0IENBUyBsYXRlbmN5LAorICAgIHRoZSBkZWZhdWx0IHZhbHVlcyB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKyAgLSBGbGFzaCBzaXplIGRldGVjdGlvbiBhZGRlZC4KKyAgLSBNb3ZlZCBGQ0MgZXRoZXJuZXQgZHJpdmVyIGluaXRpYWxpemF0aW9uIGJlaGluZCBUU0VDIGRyaXZlciBpbml0CisgICAgLT4gVFNFQyBpcyBmaXJzdCBkZXZpY2UuCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMzAgTm92IDIwMDUKKworKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyA0NDBTUCwgYWRkIHN1cHBvcnQgZm9yIEFNQ0MgTHVhbiA0NDBTUCBldmFsIGJvYXJkLgorICBQYXRjaCBieSBKb2huIE90a2VuLCAyMyBOb3YgMjAwNQorCisqIENoYW5nZWQgUFBDNDR4IHN0YXJ0dXAgbWVzc2FnZSAoY3B1IGluZm8sIHNwZWVkLi4uKSB0byBjb21tb24gc3R5bGU6CisgIE9uIFBQQzQ0eCBwbGF0Zm9ybXMsIHRoZSBzdGFydHVwIG1lc3NhZ2UgZ2VuZXJhdGVkIGluICJjcHUuYyIgb25seQorICBjb21wcmlzZWQgdGhlIHBwYyB0eXBlIGFuZCByZXZpc2lvbiBidXQgbm90IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgbGlrZSBzcGVlZCBldGMuIFRob3NlIHNwZWVkIGluZm9zIHdoZXJlIHByaW50ZWQgaW4gdGhlIGJvYXJkIHNwZWNpZmljCisgIGNvZGUuIFRoaXMgbmV3IGltcGxlbWVudGF0aW9uIG5vdyBwcmludHMgYWxsIENQVSBpbmZvcyBpbiB0aGUgY29tbW9uCisgIGNwdSBzcGVjaWZpYyBjb2RlLiBObyBib2FyZCBzcGVjaWZpYyBjb2RlIGlzIG5lZWRlZCBhbnltb3JlIGFuZAorICB0aGVyZWZvcmUgcmVtb3ZlZCBmcm9tIGFsbCBjdXJyZW50IDQ0eCBpbXBsZW1lbnRhdGlvbnMuCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjcgTm92IDIwMDUKKworKiBBZGp1c3QgVFFNODM0eCBQSFkgYWRkcmVzc2VzIGZvciBsYXRlc3QgaGFyZHdhcmUgcmV2aXNpb24uCisKKyogSW5jcmVhc2UgbWFsbG9jIGFyZW5hIG9uIFRRTTUyMDAgYm9hcmQgdG8gMjU2IGtCLgorICBXaXRoIDY0IGtiIHVuaWZvcm0gZmxhc2ggc2VjdG9yIHNpemUgdGhlIG9sZCB2YWx1ZSBvZiAxMjgga0Igd2FzCisgIHRvbyBzbWFsbC4KKworKiBGaXggbWlpcGh5IGdsb2JhbCBkYXRhIGluaXRpYWxpemF0aW9uIChwcm9ibGVtIG9uIDR4eCBib2FyZHMgd2hlbgorICBubyBldGhhZGRyIGlzIGFzc2lnbmVkKS4gSW5pdGlhbGl6YXRpb24gbW92ZWQgZnJvbQorICBtaWlwaHlfcmVnaXN0ZXIoKSB0byBldGhfaW5pdGlhbGl6ZSgpLgorCisgIEJhc2VkIG9uIGluaXRpYWwgcGF0Y2ggZm9yIDR4eCBwbGF0Zm9ybSBieSBNYXR0aGlhcyBGdWNocy4KKworKiBSZW1vdmUgdW5ubmVjZXNzYXJ5ICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPiBmcm9tIGluY2x1ZGUvYXNtLSovdS1ib290LmgKKworKiBBbGxvdyB1c2Ugb2YgaW5jbHVkZS9pbWFnZS5oIGFuZCBpbmNsdWRlL2FzbS0qL3UtYm9vdC5oIGluIHByb3ByaWV0YXJ5IGNvZGUuCisgIFRoZSBDT1BZSU5HIGZpbGUgd2FzIGV4dGVuZGVkIHRvIG1ha2UgY2xlYXIgdGhhdCB0aGVzZSBmaWxlcyBjYW4gYmUKKyAgdXNlZCBpbiBub24tR1BMIGNvZGUsIHRvby4KKyAgQWxzbywgYSBjb3JyZXNwb25kaW5nIG5vdGUgd2FzIHBsYWNlZCBpbiB0aGUgaGVhZGVycyBvZiB0aGUgYWZmZWN0ZWQgZmlsZXMuCisKKyogQWRkIHN1cHBvcnQgZm9yIFByb2RyaXZlIFAzUDQ0MCBib2FyZDoKKyAgLSBBZGRlZCBvbmJvYXJkIFBQQzQ0MCBERFIgYXV0b2RldGVjdGlvbiBpbiBjcHUvcHBjL3NkcmFtLmMKKyAgLSBDRkdfRkxBU0hfUVVJRVRfVEVTVCBhZGRlZCB0byB1c2UgdGhlIGNvbW1vbiBDRkkgZHJpdmVyCisgICAgZm9yIGJhbmsgYXV0b2RldGVjdGlvbgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIyIE5vdiAyMDA1CisKKyogQ2hhbmdlIGFsbCAnJCguLi4pJyB2YXJpYWJsZSByZWZlcmVuY2VzIGludG8gJyR7Li4ufScKKyAgd2hpY2ggbWFrZXMgdGhlIGVudmlyb25tZW50IGNvbXBhdGlibGUgd2l0aCB0aGUgaHVzaCBzaGVsbC4KKyAgV0FSTklORzogU3VwcG9ydCBmb3IgdGhlIG9sZCAnJCguLi4pJyBzeW50YXggd2lsbCBiZQorICBkaXNjb250aW51ZWQgaW4gYSBsYXRlciB2ZXJzaW9uLgorCisqIE1pbm9yIGNoYW5nZXMgdG8gaW5pdCBmbGFncyBpbiBUUU04MzR4IFBDSS4KKworKiBGaXggQmFtYm9vIEREUiBTRFJBTSBpbml0aWFsaXphdGlvbiAocHJvYmxlbSB3aXRoIG9uYm9hcmQgU0RSQU0pCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTUgTm92IDIwMDUKKworKiBOZXcgUFBDIDQwNUVQIGJvYXJkIGFkZGVkOiBDTVM3MDAKKyAgQWRkZWQgQ09ORklHX05FVF9NVUxUSSBmb3IgVk9NNDA1IGJvYXJkLgorICBBZGRlZCByZXNldF9waHkoKSBmb3IgVk9NNDA1IGJvYXJkLgorICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMDkgTm92IDIwMDUKKworKiBVcGRhdGVkIFBDSSBtYXBwaW5nIGZvciBlc2QgQ1BDSTJEUCBib2FyZC4KKyAgQWRkIHN1cHBvcnQgZm9yIGVycm9yIExFRC4KKyAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDA3IE5vdiAyMDA1CisKKyogRml4IE1QQzg1eHggUENJIHN1cHBvcnQgKHBjaV9yZWdpc3Rlcl9ob3NlKCkgYmVmb3JlIHBjaSBjb25maWcgYWNjZXNzKQorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IE5vdiAyMDA1CisKKyogQ29ycmVjdCBQUEMgVGltZWJhc2UgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKFNQUk5fVEJSTC4uLikKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNyBOb3YgMjAwNQorCisqIEFkanVzdCBiZC0+YmlfZmxhc2hzdGFydCBvbiBZZWxsb3dzdG9uZSAmIFlvc2VtaXRlIHRvIGNvcnJlY3Qgc2l6ZQorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA1IE5vdiAyMDA1CisKKyogQWRkaXRpb25hbCBmaXggZm9yIGV4dGVybmFsIElSUSBjb25maWcgb24gWWVsbG93c3RvbmUgJiBZb3NlbWl0ZQorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAzIE5vdiAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIE9jb3RlYSBwYXNzIDMgd2l0aCA0NDBHWCBSZXYuIEYKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBOb3YgMjAwNQorCisqIEZpeCBleHRlcm5hbCBJUlEgY29uZmlndXJhdGlvbiBvbiBZZWxsb3dzdG9uZSAmIFlvc2VtaXRlCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjggT2N0IDIwMDUKKworKiBBZGQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgUEhZcy4KKyAgVGVzdGVkIG9uIHRoZSBmb2xsb3dpbmcgYm9hcmRzOgorCWNtY3B1MgkgICAgKGF0OTFybTkyMDAvZXRoZXIuYykKKwlQUENoYW1lbGVvbiAocHBjNHh4LzR4eF9lbmV0LmMpCisJeXVrb24JICAgIChtcGM4MjIwL2ZlYy5jKQorCXVjMTAwCSAgICAobXBjOHh4L2ZlYy5jKQorCXRxbTgzNHgJICAgIChtcGM4MzR4L3RzZWMuYykgd2l0aCBFRVBSTzEwMAorCWxpdGU1MjAwICAgIChtcGM1eHh4L2ZlYy5jKSB3aXRoIEVFUFJPMTAwIGNhcmQgKGRyaXZlcnMvZWVwcm8xMDAuYykKKyAgTWFpbiBjaGFuZ2VzIGluY2x1ZGU6CisgIGNvbW1vbi9taWlwaHl1dGlsLmMKKyAgLSBtaWlwaHlfcmVnaXN0ZXIgcm91dGluZSB3YXMgYWRkZWQgdG8gYWxsb3cgbXVsdGlwbGUgUEhZcyB0byBiZSByZWdpc3RlcmVkCisgIC0gbWlpcGh5X3JlYWQgYW5kIG1paXBoeV93cml0ZSBhcmUgbm93IGRlZmluZWQgaW4gdGhpcyBmaWxlLCBhbmQKKyAgICByZXF1aXJlIGFkZGl0aW9uYWwgYXJndW1lbnQgKGNoYXIgKmRldm5hbWUpCisgIC0gb3RoZXIgbWlpcGh5Xyogcm91dGluZXMgYWxzbyByZXF1aXJlIGFkZGl0aW9uYWwgZGV2aWNlIG5hbWUgYXJndW1lbnQKKyAgLi4vbGliX2kzODYvYm9hcmQuYworICAuLi9saWJfcHBjL2JvYXJkLmMKKyAgQ2FsbGluZyByZXNldF9waHkoKSB3YXMgbW92ZWQgdG8gYmUgZXhlY3V0ZWQgKmFmdGVyKiBldGhfaW5pdGlhbGl6ZSgpLgorICBUaGlzIGlzIG5lY2Vzc2FyeSBhcyBub3cgc29tZSBvZiB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHJlc2V0X3BoeSgpCisgIG1heSBuZWVkIHRvIHVzZSBtaWlwaHlfcmVzZXQoKSB3aGljaCBpcyBub3QgYWxsb3dlZCBiZWZvcmUgZXRoX2luaXRpYWxpemUoKQorICBhcyBldGhfaW5pdGlhbGl6ZSByZWdpc3RlcnMgYWxsIHJlcXVpcmVkIG1paXBoeV8qIHJvdXRpbmVzLgorICBUZXN0ZWQgb24gSVA4NjAgYW5kIFBIWSBpbml0aWFsaXplcyBwcm9wZXJseSBhZnRlciB0aGlzIGNoYW5nZS4KKworKiBDb3JyZWN0IGluY2x1ZGVzIGZvciBmbGF0IHRyZWUgYnVpbGRlci4KKworKiBGaXggY29uZmxpY3RpbmcgdHlwZXMgKGZsYXNoX3dyaXRlKCkpIGluIHRyYWIgYXV0b191cGRhdGUuYy4KKworKiBBZGQgUENJIHN1cHBvcnQgZm9yIHRoZSBUUU04MzR4IGJvYXJkLgorCisqIEFkZCBtaXNzaW5nIDR4eCBib2FyZCB0byBNQUtFQUxMCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDUKKworKiBGaXggY29uZmxpY3RpbmcgdHlwZXMgKGZsYXNoX3dyaXRlKCkpIGluIGVzZCBhdXRvX3VwZGF0ZS5jCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgT2N0IDIwMDUKKworKiBGaXggcHJvYmxlbSB3aXRoIHNsZWVwIGluIE5ldENvbnNvbGUgKHVzZSBnZXRfdGltZXIoKSkKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBPY3QgMjAwNQorCisqIEFkZCBOZXRDb25zb2xlIFN1cHBvcnQgZm9yIEFNQ0MgZXZhbCBib2FyZHMKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBPY3QgMjAwNQorCisqIEZpeCBOZXRDb25zb2xlIHN1cHBvcnQgb24gNHh4IChvbmx5IHByaW50IGV0aCBsaW5rIG9uIDFzdCB0cmFuc2ZlcikKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBPY3QgMjAwNQorCisqIEFkZCBmYXQgJiBleHQyIHN1cHBvcnQgdG8gQU1DQyA0NDBFUCBib2FyZHMgWW9zZW1pdGUgJiBCYW1ib28uCisgIEZpeCBpZGVudGF0aW9uIG9uIGV4dDJscyBoZWxwIGVudHJ5LgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE0IE9jdCAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIFRRTTgzNHggYm9hcmRzLgorICBDbGVhbnVwLgorCisqIENsZWFudXAgZm9yIEdDQy00LngKKworKiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgT3BlbiBGaXJtd2FyZSBGbGF0IFRyZWUgYW5kIHVzYWdlLgorICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTMgT2N0IDIwMDUKKworKiBBZGQgbWlzc2luZyBmaWxlcyBmb3IgUGFudGVsaXMgQW50b25pb3UncyBwYXRjaAorICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDQgU2VwIDIwMDUKKworKiBGaXggcHJvYmxlbSBpbiBwcGM0eHggZXRoLWRyaXZlciB3aXRob3V0IGV0aGFkZHIgKG9ubHkgd2l0aG91dAorICBDT05GSUdfTkVUX01VTFRJIHNldCkKKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBPY3QgMjAwNQorCisqIEZpeCBnemlwIGJtcCBzdXBwb3J0ICh0ZXN0IGlmIG1hbGxvYyBmYWlscywgd2FybmluZyB3aGVuIHRydW5jYXRlZCkuCisgIEluY3JlYXNlIENGR19WSURFT19MT0dPX01BWF9TSVpFIG9uIEhINDA1IGJvYXJkLgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA3IE9jdCAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIE9GIGZsYXQgdHJlZSBmb3IgdGhlIFNUWHRjIGJvYXJkLgorICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDQgU2VwIDIwMDUKKworKiBTdXBwb3J0IHBhc3Npbmcgb2YgT0YgZmxhdCB0cmVlcyB0byB0aGUga2VybmVsLgorICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDQgU2VwIDIwMDUKKworKiBDbGVhbnVwCisKKyogQWRkIHN1cHBvcnQgZm9yIE5ldFNpbGljb24gTlM3NTIwIHByb2Nlc3Nvci4KKyAgUGF0Y2ggYnkgQXJ0IFNoaXBrb3dza2ksIDEyIE1heSAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIEFQMTAwMCBib2FyZC4KKyAgUGF0Y2ggYnkgSmFtZXMgTWFjQXVsYXksIDA3IE9jdCAyMDA1CisKKyogRWxpbWluYXRlIGhhcmQtY29kZWQgYWRkcmVzcyBvZiBFdGhlcm5ldCB0cmFuc2ZlciBidWZmZXIgb24gYXQ5MXJtOTIwMAorICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwNyBPY3QgMjAwNQorCisgIFRoZSBBdG1lbCBlcnJhdGEgIzExIHN0YXRlcyB0aGF0IHRoZSB0cmFuc2ZlciBidWZmZXIgZGVzY3JpcHRvcgorICB0YWJsZSBtdXN0IGJlIGFsaWduZWQgb24gYSAxNi13b3JkIGJvdW5kYXJ5LiBBcyBpdCB0dXJuZWQgb3V0LCB0aGlzCisgIGlzIGluc3VmZmljaWVudCAtIGl0IHNlZW1zIHRoZSB0YWJsZSBtdXN0IGJlIGFsaWduZWQgb24gYSBib3VuZGFyeQorICBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgdGFibGUgaXRzZWxmIChpbiBMaW51eCB0aGlzIGlzIG5vdCBhbgorICBpc3N1ZSAtIHRoZSB0YWJsZSBpcyBhbGlnbmVkIG9uIGEgUEFHRV9TSVpFICg0MDk2KSBib3VuZGFyeSkuCisKKyogRml4ZWQgY29tcGlsYXRpb24gZm9yIEFSTSB3aGVuIHVzaW5nIGEgKHN0YW5kYXJkKSBoYXJkLUZQIHRvb2xjaGFpbgorICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwNyBPY3QgMjAwNQorCisqIENsZWFudXAgd2FybmluZ3MgZm9yIGNwdS9hcm03MjB0ICYgY3B1L2FybTExMzYgZmlsZXMuCisgIHNlZCB0aGUgbGlua2VyIHNjcmlwdHMsIHJhdGhlciB0aGFuIHByZS1wcm9jZXNzIHRoZW0uCisgIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMDcgT2N0IDIwMDUKKworKiBVcGRhdGUgbWFrZSB0YXJnZXQgZm9yIEFSTSBzdXBwb3J0ZWQgYm9hcmRzLgorICBVc2UgbG93bGV2ZWxfaW5pdCgpIGluc3RlYWQgb2YgcGxhdGZvcm1zZXR1cCgpIFtyZW5hbWVdLgorICBQYXRjaCBieSBQZXRlciBQZWFyc2UsIDA2IE9jdCAyMDA1CisKKyogRml4IGJvb3RpbmcgZnJvbSBzZXJpYWwgZGF0YWZsYXNoIG9uIEFUOTFSTTkyMDAKKyAgUGF0Y2ggYnkgUGV0ZXIgTWVuemViYWNoLCAyOSBBdWcgMjAwNQorCisqIEFkZCBKRkZTMiBzdXBwb3J0IGZvciBUUkFCIGJvYXJkCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDI1IEF1ZyAyMDA1CisKKyogUmVtb3ZlIHVubmVjZXNzYXJ5IGRlcGVuZGVuY3kgb2YgbmV0Y29uc29sZSBvbiBDT05GSUdfTkVUX01VTFRJCisgIFBhdGNoIGJ5IE1hcmN1cyBIYWxsLCAyNCBBdWcgMjAwNQorCisqIEZpeCB0aGUgbWFjaGluZS1pZCBvZiB0aGUgQ29nZW50IGNzYjYzNyBib2FyZAorICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAwNSBPY3QgMjAwNQorCisqIENvbXBsZXRlIHN1cHBvcnQgZm9yIHRoZSBLd2lrQnl0ZSBLQjkyMHggYm9hcmRzCisgIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDA1IE9jdCAyMDA1CisKKyogU2V0IHRoZSBBVDkxUk05MjAwIGNsb2NrIHRvIGFzeW5jaHJvbm91cyBtb2RlCisgIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDAzIE1heSAyMDA1CisKKyogU2V0IHRoZSBBVDkxUk05MjAwIGNsb2NrIHRvIHN5bmNocm9ub3VzIG1vZGUKKyAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjkgQXByIDIwMDUKKworKiBBZGQgc3VwcG9ydCBmb3IgQ29nZW50IGNzYjYzNworICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyOSBBcHIgMjAwNQorCisqIEZpeCBkbTkxNjEuYyBpbml0aWFsaXphdGlvbgorICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyOSBBcHIgMjAwNQorCisqIEZpeCBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDAyIE1hciAyMDA1CisgICg4ZTJiZTUxZGU4ZGQwM2MxY2U0ZDA2Y2JiMThhZDA2MTMzZDQ3Y2Q1KQorCisqIE1vdmUgZG05MTYxLmMgYW5kIGx4dDk3Mi5jIGludG8gY3B1L2FybTkyMHQvYXQ5MXJtOTIwMAorICBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyOSBBcHIgMjAwNQorCisqIEZpeCBkZXZpY2UgcGFydGl0aW9uIGludGlhbGl6YXRpb24gZm9yIFN5c3RlbUFDRSBkaXNrcy4KKyAgUGF0Y2ggYnkgU3RlcGhlbiBXaWxsaWFtcywgMjggQXByIDIwMDUKKworKiBBZGRlZCBzdXBwb3J0IGZvciBLd2lrQnl0ZSBLQjkyMHggYm9hcmRzIChiYXNlZCBvbiBBVDkxUk05MjAwKQorICBQYXRjaCBieSBNYXR0ID8/IDxrYjkyMDBfZGV2QGt3aWtieXRlLmNvbT4sIDI3IEFwciAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIFMyOUdMMDY0TS1SMyBmbGFzaCBjaGlwIG9uIHhzZW5naW5lIGJvYXJkCisgIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAxOCBBcHIgMjAwNQorCisqIEU1MDAgdXBkYXRlOiByZXBvaW50IElWUFIgdG8gUkFNIHdoZW4gY29kZSBpcyByZWxvY2F0ZWQKKyAgUGF0Y2ggYnkgS3lsbyBHaW5zYmVyZywgMTMgQXByIDIwMDUKKworKiBGaXggbG9vcCBlbmQgdGVzdCBpbiBsaWJfZ2VuZXJpYy9zdHJpbmcuYzpzdHJzd2FiKCkKKyAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIE9jdG9iZXIgMTAsIDIwMDUKKyAgU2lnbmVkLW9mZi1ieTogQW5kcmV3IER5ZXIgPGFtZHllckBnbWFpbC5jb20+CisKKyogQ2xlYW51cAorCisqIFVwZGF0ZSBBUk0gSW50ZWdyYXRvciBib2FyZHM6CisgIENvcnJlY3QgYWRkZXNzaW5nIGVycm9ycyBpbiBwbGF0Zm9ybSBmaWxlcy4KKyAgU3BsaXQgb2ZmIGNvbW1vbiBjb3JlIG1vZHVsZSBkYXRhIGZyb20gSW50ZWdyYXRvciBoZWFkZXIgZmlsZXMgdG8KKyAgaW5jbHVkZS9hcm1jb3JlbW9kdWxlLmguCisgIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMDQgT2N0IDIwMDUKKworKiBNYWtlIHN1cmUgb25seSBzdXBwb3J0ZWQgY29tcGlsZXIgb3B0aW9ucyBhcmUgdXNlZAorICBJbXBvcnQgImNjLW9wdGlvbiIgc2hlbGwgZnVuY3Rpb24gZnJvbSBrZXJuZWwgYW5kCisgIHVzZSBpdCB0byBnZXQgdGhlIGNvcnJlY3QgQVJNIEdDQyBvcHRpb25zIGZvciBpbmRpdmlkdWFsIENQVXMKKyAgUGF0Y2ggYnkgUGV0ZXIgUGVhcnNlLCAzMCBKdW4gMjAwNQorCisqIEZpeCA0NDBHUiB0byBwcmludCBjb3JyZWN0IGNwdSByZXZpc2lvbgorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA0IE9jdCAyMDA1CisKKyogQ2hhbmdlIGJvYXJkIG1lc3NhZ2Ugb24gQU1DQyBZb3NlbWl0ZSAmIFllbGxvd3N0b25lIHRvIGNvbW1vbiBzdHlsZQorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAzIE9jdCAyMDA1CisKKyogRml4IGNvbXBpbGVyIHdhcm5pbmcKKworKiBGaXggRkVDIFBIWSBhZGRyZXNzZXMgZm9yIFRRTTg1eHggYm9hcmRzCisKKyogRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgcHJvYmxlbSBpbiBodXNoIHNoZWxsCisgIFBhdGNoIGJ5IExhcnMgUm9zdG9jaywgMjYgU2VwIDIwMDUKKworKiBVbmRvIGNoYW5nZSBvZiBmNmUyMGZjNmNhLi4uIHRvIGluY2x1ZGUvY29uZmlncy90cmFiLmgKKyAgKE11c3QgaGF2ZSBiZWVuIGFuIGFjY2lkZW50PykKKworKiBBZGQgc3VwcG9ydCBmb3IgQVQ5MVJNOTIwMCBPSENJIENvbnRyb2xsZXIuCisgIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAwNyBBcHIgMjAwNQorCisqIFVwZGF0ZSBBUk0gbWFjaC10eXBlcy5oCisgIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAwNyBBcHIgMjAwNQorCisqIEFkZCBzdXBwb3J0IGZvciBNUDJVU0IgYm9hcmQuCisgIFBhdGNoIGJ5IEVyaWMgQmVuYXJkLCAwNyBBcHIgMjAwNQorCisqIEFkZCBib2FyZCBzdXBwb3J0IGZvciBhcm1hZGlsbG8gSFQxMDcwCisgIFBhdGNoIGJ5IFJvd2VsIEF0aWVuemEsIDA2IEFwciAyMDA1CisKKyogU2Vjb25kIEV0aGVybmV0IGFkZHJlc3MgZW5hYmxlZCBmb3IgTVBDODg1QURTIGFuZCBNUEM4MjcyQURTLgorICBQYXRjaCBieSBWaXRhbHkgQm9yZHVnLCAzMCBNYXIgMjAwNQorCisqIEFkZCBpb3BzZXQgY29tbWFuZCBvbiBtcGM4eHgKKyAgUGF0Y2ggYnkgRGFuaWVsIEVpc2VuaHV0LCAyNSBNYXIgMjAwNQorCisqIEFkZCBzdXBwb3J0IGZvciBNSUkgaW4gZWVwcm8xMDAgZHJpdmVyLgorICBQYXRjaCBieSBHbGViIE5hdGFwb3YsIDIxIE1hciAyMDA1CisKKyogRml4ZXMgdG8gdGhlIEx1YmJvY2sgKFBYQSAyNXgpIHN1cHBvcnQ6CisgIC0gUmVzb2x2ZSB0aGUgRklYTUUgd2l0aCByZXNwZWN0IHRvIHNhdmluZyB0aGUgdS1ib290IGVudmlyb25tZW50LgorICAtIE1ha2UgdGhlIGRlZmF1bHQgbG9hZCBhZGRyZXNzIGxhbmQgaW4gcmVhbCBtZW1vcnkuCisgIC0gRml4IGxhbjkxYzk2IFNNQ197aW4sb3V0fXtiLHcsbH0oKSBtYWNyb3MKKyAgUGF0Y2ggYnkgRGF2aWQgQnJvd25lbGwsIDEwIE1hciAyMDA1CisKKyogQWRkIEJhcmNvIFN0cmVhbWluZyBWaWRlbyBDYXJkIChTVkMpIGFuZCBTYW1wbGUgQ29tcHJlc3MgTmV0d29yayAoU0NOKSBib2FyZAorICBQYXRjaCBieSBNYXJjIExlZW1hbiwgMDQgTWFyIDIwMDUKKworKiBPTUFQMjQyeCBINCBib2FyZCB1cGRhdGUKKyAgLSBmaXggZm9yIEVTMiBkaWZmZXJlbmNlcy4KKyAgLSBzd2l0Y2ggdG8gdXNpbmcgdGhlIGNmaV9mbGFzaCBkcml2ZXIuCisgIC0gZml4IFNSQU0gYnVpbGQgYWRkcmVzcy4KKyAgLSBmaXggZm9yIEdQIGRldmljZSBvcGVyYXRpb24uCisgIC0gdW5sb2NrIFNSQU0gZm9yIEdQIGRldmljZXMuCisgIC0gZGlzcGxheSBtb3JlIGRldmljZSBpbmZvcm1hdGlvbi4KKyAgLSBmaXggcG90ZW50aWFsIGRlYWRsb2NrIGluIG9tYXAyNHh4X2kyYyBkcml2ZXIuCisgIC0gZml4IERMTCBsb2FkIHZhbHVlcyB0byBtYXRjaCBkcGxsb3V0KjEgb3BlcmF0aW9uLgorICAtIGZpeCAybmQgY2hpcCBzZWxlY3QgaW5pdCBmb3IgY29tYm8gRERSIGRldmljZS4KKyAgLSBhZGQgc3VwcG9ydCBmb3IgQ0ZJIEludGVsIDI4RjI1NkwxOCBvbiBINCBib2FyZC4KKyAgUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMDMgTWFyIDIwMDUKKworKiBGaXggZm9ybWF0aW5nIGluIGluY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvQVQ5MVJNOTIwMC5oCisgIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDAyIE1hciAyMDA1CisKKyogRml4IHR5cG8gaW4gZXRoLmMKKyAgUGF0Y2ggYnkgQXJhIEF2YW5lc3lhbiwgMjQgRmViIDIwMDUKKworKiBSZW1vdmUgdW5uZWVkZWQgI2luY2x1ZGUgPG1hbGxvYy5oPgorICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMjIgRmViIDIwMDUKKworKiBBZGQgY3JhbWZzIHN1cHBvcnQgZm9yIG02OGsKKyAgUGF0Y2ggYnkgWmFjaGFyeSBMYW5kYXUsIDIxIEZlYiAyMDA1CisKKyogVXBkYXRlIGVwODI2MDogRml4IGZsYXNoIHRpbWVvdXRzOyBpbXByb3ZlIGNsb2NrIHJlc29sdXRpb24gZm9yIGZhc3RlciBVQVJUcworICBQYXRjaCBieSBKZWZmIEFuZ2llbHNraSwgMjEgRmViIDIwMDUKKworKiBGaXggYXUxeDAwX3NlcmlhbCBiYXVkIHJhdGUgY2FsY3VsYXRpb246CisgIHJlbW92ZSBoYXJkY29kZWQgY3B1IGNsb2NrIGRpdmlzb3IgYW5kIHVzZSByZWdpc3RlciBpbnN0ZWFkOworICByb3VuZCB1cCBpbnN0ZWFkIG9mIHRydW5jYXRlCisgIFBhdGNoIGJ5IEFuZHJldyBEeWVyLCAxNSBGZWIgMjAwNQorCisqIEFkZCBYaWxpbnggU3BhcnRhbjMgZmFtaWx5IEZQR0Egc3VwcG9ydAorICBQYXRjaCBieSBLdXJ0IFN0cmVtZXJjaCwgMTQgRmViIDIwMDUKKworKiBGaXggZHJpdmVycy9jZmlfZmxhc2guYzogdXNlIGluZm8tPnJlc2V0X2NtZCBpbnN0ZWFkIG9mIEZMQVNIX0NNRF9SRVNFVAorICBQYXRjaCBieSBaYWNoYXJ5IExhbmRhdSwgMTEgRmViIDIwMDUKKworKiBGaXggVk9INDA1IFN1cHBvcnQKKyAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI1IFNlcCAyMDA1CisKKyogQWRkZWQgc3VwcG9ydCBmb3IgUENJIGJyaWRnZSBvbiBNUEM4MjcyQURTCisgIFBhdGNoIGJ5IFZpdGFseSBCb3JkdWcsIEZlYiAwOSAyMDA1CisKKyogVXBkYXRlIG11bHRpY29yZSBDTTlYWCBzdXBwb3J0IGZvciBJbnRlZ3JhdG9yIEFQIHRvIGFsbG93IGJvb3RpbmcgZnJvbSBmbGFzaAorICBQYXRjaCBieSBKZWFuLVBhdWwgU2FtYW4sIDggRmViIDIwMDUKKworKiBGaXggc3Ryc3dhYigpIHRvIHJlbGlhYmx5IGZpbmQgZW5kIG9mIHN0cmluZworICBQYXRjaCBieSBBbmRyZXcgRHllciwgMDggRmViIDIwMDUKKworKiBGaXggdHlwb3MgaW4gaW5jbHVkZS9wcGM0NDAuaAorICBQYXRjaCBieSBBbmRyZXcgRSBNaWxlc2tpLCAwNCBGZWIgMjAwNQorCisqIEFkZCBWaWJyZW4gKHdhcyBBY2NlbGVudCkgUFhBMjU1IElEUCBTdXBwb3J0CisgIFBhdGNoIGJ5IENsaWZmIEJyYWtlLCAwNCBGZWIgMjAwNQorCisqIEZpeCB0b29scy9ibXBfbG9nby5jIHVzaW5nIGluY29ycmVjdCBvZmZzZXQgdG8gcGl4ZWwgZGF0YQorICBQYXRjaCBieSBBbmRyZXcgRHllciwgMzEgSmFuIDIwMDUKKworKiBBZGQgQVJNOTQ2RSBjcHUgYW5kIGNvcmUgbW9kdWxlIHRhcmdldHM7IHJlbWFwIG1lbW9yeSB0byAweDAwMDAwMDAwCisgIFBhdGNoIGJ5IFBldGVyIFBlYXJzZSwgMiBGZWIgMjAwNQorCisqIEZpeCBlcnJvciBoYW5kbGluZyBpbiB0b29scy9lbnYvZndfZW52LmMKKyAgUGF0Y2ggYnkgQXJhIEF2YW5lc3lhbiwgMDEgRmViIDIwMDUKKworKiBGaXggTUdUNTEwMCBQU0MgYmF1ZHJhdGUgY2FsY3VsYXRpb24KKyAgUGF0Y2ggYnkgU2ViYXN0aWFuIFNjaGF1LCAyNyBKYW4gMjAwNQorCisqIE9NQVAyNDJ4IGZpeCBmb3IgR1AgZGV2aWNlIGJvb3RpbmcKKyAgLSBBZGQgU1JBTSB1bmxvY2sgZm9yIEdQIGRldmljZXMuCisgIC0gQ2hhbmdlIEREUiBETEwgdW5sb2NrIHZhbHVlIHRvIGFsbG93IERQTExvdXQqMSBvcGVyYXRpb24uCisgIFBhdGNoZXMgYnkgUmljaGFyZCBXb29kcnVmZiwgMjEgSmFuIDIwMDU6CisKKyogQWRkIHN1cHBvcnQgZm9yIEFNRCdzIFBiMXgwMCBldmFsIGJvYXJkOworICBhZGQgTUlJIHJvdXRpbmVzIHRvIHRoZSBhdTF4MDAgZXRoZXJuZXQgZHJpdmVyOworICBhZGQgVVNCIG9oY2kgZHJpdmVyICh3b3JrIGluIHByb2dyZXNzKQorICBQYXRjaCBieSBUaG9tYXMgU2FpbGVyLCAyMCBKYW4gMjAwNQorCisqIFVwZGF0ZSBvbWFwNTkxMm9zayBib2FyZAorICBVc2UgZHJpdmVycy9jZmlfZmxhc2guYyBpbnN0ZWFkIG9mIHByaXZhdGUgZmxhc2ggZHJpdmVyOworICBSZW1vdmUgaGFyZGNvZGVkIHBlcnNvbmFsaXplZCBzZXR0aW5ncyBmcm9tIG9tYXA1OTEyb3NrLmg7CisgIEZpeCBzcGFjaW5nIHdpdGggKFJPKSBtYXJrcyBpbiAnZmxpbmZvJyBvdXRwdXQuCisgIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDE0IEphbiAyMDA1CisKKyogRml4IHdhcm5pbmdzIGZvciBQQ0kgY29kZSBvbiBpeHAKKyAgUGF0Y2ggYnkgSm9lIDxsZ3h1ZUB5YWhvby5jb20+LCAxMyBKYW4gMjAwNQorCisqIHZpcnRleDIgZml4IGZvciBib2d1cyBkb3dubG9hZCBlcnJvciBtZXNzYWdlcworICBUaGUgdmlydGV4MiBGUEdBIGRvd25sb2FkIGNvZGUgd2F0Y2hlcyBmb3IgaW5pdCBnb2luZyBhY3RpdmUgZHVyaW5nCisgIGEgZG93bmxvYWQgb2YgY29uZmlnIGRhdGEgYXMgYW4gZXJyb3IgY29uZGl0aW9uLiBpbml0IGFsc28gZ29lcworICBhY3RpdmUgYWZ0ZXIgYSBjb25maWd1cmF0aW9uIGlzIGZpbmlzaGVkIGluIGNvbmNlcnQgd2l0aCB0aGUgZG9uZQorICBzaWduYWwuIFNvIGZhciwgdGhlIGNvZGUgZG9lcyBub3QgY2hlY2sgZm9yIGRvbmUgYWN0aXZlIHVudGlsIGFsbAorICBvZiB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGlzIHNlbnQuIElmIGNvbmZpZ3VyYXRpb24gZGF0YSBoYXMgYSBmZXcKKyAgZXh0cmEgcGFkIGJ5dGVzIGF0IHRoZSBlbmQsIHRoaXMgd291bGQgY2F1c2UgYW4gZXJyb3IgbWVzc2FnZSBldmVuCisgIHRob3VnaCB0aGUgZG93bmxvYWQgaGFkIHN1Y2VlZGVkLgorICBOT1RFOiB2aXJ0ZXgyIHNsYXZlIHNlcmlhbCBhbmQgc3BhcnRhbjIgdmVyc2lvbnMgbWF5IHN0aWxsIGhhdmUgdGhlCisgIHNhbWUgcHJvYmxlbS4KKyAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDEyIEphbiAyMDA1CisKKyogT3B0aW1pemUgZmxhc2hfbWFrZV9jbWQgaW4gZHJpdmVycy9jZmlfZmxhc2guYyBmb3IgbGl0dGxlIGVuZGlhbgorICBGaXggIldBUk5JTkc6IGZsYXNoX21ha2VfY21kOiB1bnN1cHBwb3J0ZWQgTGl0dGxlRW5kaWFuIG1vZGUiCisgIG1lc3NhZ2Ugd2hlbiBwcm9iaW5nIGZvciBub25leGlzdGVudCBmbGFzaCBpbiBsaXR0bGUgZW5kaWFuIG1vZGUuCisgIEFzIGEgc2lkZSBlZmZlY3QgbW9yZSBlZmZpY2llbnQgYW5kIHNtYWxsZXIgY29kZSBpcyBnZW5lcmF0ZWQsCisgIHdoaWNoIGlzIGFsd2F5cyBhIEdvb2QgVGhpbmcgKFRNKS4KKyAgUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDI0IFNlcCAyMDA1CisKKyogVXBkYXRlIGZvciBURlRQIHVzaW5nIGEgZml4ZWQgVURQIHBvcnQKKyAgVXNlIHRoZSBhcHByb3ZlZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcy4gQWRkZWQgInRmdHBkc3RwIiB0bworICBhbGxvdyBwb3J0cyBvdGhlciB0aGFuIDY5IHBlciBUb2x1bmF5IE9ya3VuJ3MgcmVjb21tZW5kYXRpb24uCisgIFBhdGNoIGJ5IEplcnJ5IFZhbiBCYXJlbiwgMTIgSmFuIDIwMDUKKworKiBBbGxvdyB0byBmb3JjZSBURlRQIHRvIHVzZSBhIGZpeGVkIFVEUCBwb3J0CisgIChBZGQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBDT05GSUdfVEZUUF9QT1JUIGFuZCBvcHRpb25hbCBlbnYKKyAgdmFyaWFibGUgdGZ0cHBvcnQpCisgIFBhdGNoIGJ5IEplcnJ5IFZhbiBCYXJlbiwgMTAgSmFuIDIwMDUKKworKiBGaXggZXRoZXJuZXQgdGltZW91dHMgb24gZGJhdTE1NTAgYW5kIG90aGVyIGF1MXgwMCBzeXN0ZW1zCisgIFBhdGNoIGJ5IExlaWYgTGluZGhvbG0sIDI5IERlYyAyMDA0CisKKyogQ2xlYW51cDogZml4IGJyb2tlbiBidWlsZHMKKworKiBGaXggUEhZIGFkZHJlc3MgYXJndW1lbnQgcGFzc2luZyB3aXRoIG1paSBpbmZvIGNvbW1hbmQKKyAgUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI4IERlYyAyMDA0CisKKyogQ2xlYW51cCAoUFBDNHh4IGlzIEFNQ0Mgbm93KQorCisqIGVzZCBDUENJMkRQIGJvYXJkIGFkZGVkCisgIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyMiBTZXAgMjAwNQorCisqIGVzZCBQTUM0MDUgYm9hcmQgdXBkYXRlZAorICBQYXRjaCBieSBNYXR0aGlhcyBGdWNocywgMjIgU2VwIDIwMDUKKworKiBBZGQgU001MDEgc3VwcG9ydCB0byBISDQwNSBib2FyZC4KKyAgQWRkIHN1cHBvcnQgZm9yIGd6aXAgY29tcHJlc3NlZCBibXAncyAoQ09ORklHX1ZJREVPX0JNUF9HWklQKS4KKyAgQWRkIHN1cHBvcnQgZm9yIGVlcHJvbSB3cml0ZS1lbmFibGUgKENGR19FRVBST01fV1JFTikuCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjIgU2VwIDIwMDUKKworKiBGaXggYXV0b25lZ290aWF0aW9uIGluIHRzZWMgZXRoZXJuZXQgZHJpdmVyCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjEgU2VwIDIwMDUKKworKiBGaXggYnVnIGluIGF1dG9fdXBkYXRlICh0cmFiIGJvYXJkKQorICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNiBTZXAgMjAwNQorCisqIEZpeCBjb21wdXRhdGlvbiBvZiBmcmFtZWJ1ZmZlciBwYWxldHRlIGZvciA4YnBwIExDRCBiaXRtYXBzCisgIFBhdGNoIGJ5IEZyYW5jZXNjbyBNYW5kcmFjY2ksIDE2IFNlcCAyMDA1CisKKyogVXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIElOS0E0eDAgYm9hcmQKKworKiBVcGRhdGUgY29uZmlndXJhdGlvbiBmb3IgUE04NTQgYm9hcmQKKyAgQmFzZWQgb24gcGF0Y2ggYnkgUi4gTG9lZmZsLCAyMCBKdWwgMjAwNQorCisqIEFkZCBQQ0kgc3VwcG9ydCB0byBUUU04NTQwIGFuZCBUUU04NTYwIGJvYXJkcworICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE1IFNlcCAyMDA1CisKKyogVXBkYXRlIEFNQ0MgWW9zZW1pdGUgdG8gZ2V0IGEgY29uc2lzdGVudCBzZXR1cCBmb3IgYWxsIEFNQ0MgZXZhbAorICBib2FyZHMgKGJhdWRyYXRlLCBlbnZpcm9ubWVudC4uLikuIEZsYXNoIGRyaXZlciBmaXhlZC4KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBTZXAgMjAwNQorCisqIEZpeCBwcm9ibGVtIGluIDQ0MEdQIGV0aGVybmV0IGRyaXZlciAoZWJvbnkpLiBBZGQgc3VwcG9ydCBmb3IgMm5kCisgIGV0aGVybmV0IHBvcnQgb24gZWJvbnkuCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNyBTZXAgMjAwNQorCisqIEFkZGVkIHN1cHBvcnQgZm9yIG10ZGRldm51bSBhbmQgbXRkZGV2bmFtZSB2YXJpYWJsZXMgKG10ZHBhcnRzIGNvbW1hbmQpCisKKyogQ2hhbmdlIGRlZmF1bHQgY29uc29sZSBiYXVkIHJhdGUgZm9yIHN0eHh0YyBib2FyZAorCisqIEFkZCBJMkMgc3VwcG9ydCB0byBUUU04NTQwIGFuZCBUUU04NTYwIGJvYXJkcyAoRUVQUk9NLCBSVEMsIExNNzUtRFRUKS4KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAzMSBBdWcgMjAwNQorCisqIEZpeCBkZWZhdWx0IGNvbW1hbmQgc2V0IChkb24ndCBpbmNsdWRlIENGR19DTURfRElTUExBWSBjb21tYW5kKQorICBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMDIgU2VwIDIwMDUKKworKiBDbGVhbnVwCisKKyogRW5hYmxlIFNNNzEyIGRyaXZlciBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkLgorCisqIEZpeCBwcm9ibGVtcyB3aXRoIGxkIHZlcnNpb24gMi4xNiAoZG90IG91dHNpZGUgc2VjdGlvbnMgcHJvYmxlbSkKKyAgUG9pbnRlZCBvdXQgYnkgR2VyaGFyZCBKYWVnZXIsIDMxIEF1ZyAyMDA1OworICBjZi4gaHR0cDovL3NvdXJjZXdhcmUub3JnL21sL2JpbnV0aWxzLzIwMDUtMDgvbXNnMDA0MTIuaHRtbAorCisqIFByZXBhcmUgVS1Cb290IGZvciBnY2MtNC54OiBmaXggZ2xvYmFsIGRhdGEgcG9pbnRlciBpbml0aWFsaXphdGlvbgorCisqIEFkanVzdCBDUzMgdGltaW5ncyBvbiBITUkxMDAxIGJvYXJkIGZvciBkb3QgbWF0cml4IGRpc3BsYXkgdW5kZXIgTGludXgKKworKiBBZGQga2V5Ym9hcmQgYW5kIGRvdCBtYXRyaXggZGlzcGxheSBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkLgorCisqIFByZXBhcmUgVS1Cb290IGZvciBnY2MtNC54CisKKyogRml4ZWQgQmFtYm9vIHBvcnQgdG8gZW5hYmxlIHJ1bm5pbmcgd2l0aG91dCBERFItRElNTQorICAoQmFtYm9vIGhhcyBhbHNvIDY0TUIgb25ib2FyZCBERFIpCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjQgQXVnIDIwMDUKKworKiBNZXJnZWQgNDA1Z3BfZW5ldC5jIGFuZCA0NDBneF9lbmV0LmMgdG8gZ2VuZXJpYyA0eHhfZW5ldC5jCisgIG5vdyBoYW5kbGluZyBhbGwgNHh4IGNwdSdzCisgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTYgQXVnIDIwMDUKKworKiBGaXggbWFrZSBkZXBlbmRlbmNpZXMgZm9yIGF0OTFybTkyMDAgYW5kIGtzODY5NSBjcHVzCisgIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIzIEF1ZyAyMDA1CisKKyogQWRkIEpGRlMyIHN1cHBvcnQgZm9yIFRRTTUyMDAgYm9hcmQKKworKiBBZGQgZXNkIGNwY2k1MjAwIGFuZCBwZjUyMDAgYm9hcmRzCisgIFBhdGNoIGJ5IFJlaW5oYXJkIEFybHQsIDIyIEF1ZyAyMDA1CisKKyogRml4IHN5c2Nsb2NrIGZvciBUUU04NTQwIGFuZCBUUU04NTYwIGJvYXJkcworICBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNSBKdWwgMjAwNQorCisqIEluaXRpYWxpemUgc2VyaWFsIyBhbmQgZXRoYWRkciBmcm9tIG1hbnVmYWN0dXJlciBkYXRhIGluIEVFUFJPTSBvbiBDTUMtUFUyCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA4IEp1biAyMDA1CisKKyogQWRkIG5ldyBib2FyZCBzcGVjaWZpYyBjb21tYW5kcyBmb3IgVFFNNTIwMC9TVEs1MlhYCisgIC0gU291bmQgY29tbWFuZHMgKGJlZXAsIHdhdiwgc291bmQpCisgIC0gVGVzdCBjb21tYW5kcyAobGVkLCBjYW4sIGJhY2tsaWdodCwgcnMyMzIpCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDAyIE1heSAyMDA1CisKKyogQ2hhbmdlIG1haW4gY2xvY2sgb24gQ01DLVBVMiBib2FyZCBmcm9tIDIwNyBNSHogdG8gMTc5IE1IegorICBiZWNhdXNlIG9mIGEgYnVnIGluIHRoZSBBVDkxUk05MjAwIENQVSBQTEwKKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjIgQXByIDIwMDUKKworKiBBZGQgYXV0b21hdGljIEhXIGRldGVjdGlvbiBmb3IgYW5vdGhlciBDTUNfUFUyIHZhcmlhbnQKKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjAgQXByIDIwMDUKKworKiBSZW1vdmUgQ09ORklHX0FUOTFSTTkyMDBESyBpbiBDTUMtUFUyIGNvbmZpZ3VyYXRpb24KKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTkgQXByIDIwMDUKKworKiBGaXggaW5pdGlhbGl6YXRpb24gcHJvYmxlbSBvbiBUUU01MjAwIHdpdGhvdXQgU001MDEKKyAgUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDggQXByIDIwMDUKKworKiBBZGQgUlRDIHN1cHBvcnQgZm9yIFNUSzUyWFguMjAwCisgIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDA3IEFwciAyMDA1CisKKyogQWRkIHN1cHBvcnQgZm9yIElGTSBvMmRudCBib2FyZAorCisqIEVuYWJsZSBQQ0kgb24gaG1pMTAwMSBib2FyZAorCisqIEZpeCByZXR1cm4gdmFsdWVzIG9mIHRoZSBqZmZzMiBjb21tYW5kcyBscy9mc2xvYWQvZnNpbmZvLAorICBzbyB3ZSBjYW4gdXNlIHRoZW0gdG8sIGUuZy4sIGNoZWNrIHRoZSBleGlzdGVuY2Ugb2YgYSBmaWxlIHdpdGgKKyAgImlmIGxzIGZvbzsgdGhlbiB0aGlzOyBlbHNlIHRoYXQ7IGZpIiBpbiB0aGUgaHVzaCBzaGVsbAorICBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAxNiBBdWd1c3QgMjAwNQorCisqIENvZGluZyBzdHlsZSBjbGVhbnVwCisKKyogQWRkIHN1cHBvcnQgZm9yIFNpbGljb24gVHVybmtleSBlWHByZXNzIFhUYyAobXBjODd4Lzg4eCkgYm9hcmQuCisgIFBhdGNoIGJ5IERhbiBNYWxlayBhbmQgUGFudGVsaXMgQW50b25pb3UsIDE1IEF1ZyAyMDA1CisKKyogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIG1hbGxvYyBpbiA0NDBneF9lbmV0LmMKKyAgUGF0Y2ggYnkgVHJhdmlzIEIuIFNhd3llciwgMTggSnVsIDIwMDUKKworKiBBZGQgU2FuZGJ1cnN0IE1ldHJvYm94IGFuZCBTYW5kYnVyc3QgS2FyZWYgYm9hcmQgc3VwcG9ydCBwYWNrYWdlcy4KKyAgU2Vjb25kIHNlcmlhbCBwb3J0IG9uIDQ0MEdYIG5vdyBkZWZpbmVkIGFzIGEgc3lzdGVtIGRldmljZS4KKyAgQWRkICdTaG9ydCBFdGNoJyBjb2RlIGZvciBDaWNhZGEgUEhZIHdpdGhpbiA0NDBneF9lbmV0LmMKKyAgUGF0Y2ggYnkgVHJhdmlzIEIuIFNhd3llciwgMTIgSnVsIDIwMDUKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4zOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIE1pbm9yIGNvZGUgY2xlYW51cAorCisqIEFkZCBmb3Jnb3R0ZW4gbmV3IGZpbHMgZnJvbSBsYXRlc3QgVm9pY2VCbHVlIHVwZGF0ZQorCisqIE1ha2UgYm9vdHJldHJ5IGZlYXR1cmUgd29yayB3aXRoIGh1c2ggc2hlbGwuCisgIENhdmVhdDogdGhpcyBjdXJyZW50bHkgKnJlcXVpcmVzKiBDT05GSUdfUkVTRVRfVE9fUkVUUlkgdG8gYmUgc2V0LCB0b28uCisgIFBhdGNoIGJ5IEFuZHJlYXMgRW5nZWwsIDE5IEp1bCAyMDA1CisKKyogVXBkYXRlIEh5bW9kIEJvYXJkIERhdGFiYXNlIFBIUCBjb2RlIGluICJ0b29scyIgZGlyZWN0b3J5CisgIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDAxIEp1bCAyMDA1CisKKyogTWFrZSAidHIiIGNvbW1hbmQgdXNlIFBPU0lYIGNvbXBsaWFudDsgZXhwb3J0IEhPU1RPUyBtYWtlIHZhcmlhYmxlCisgIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDMwIEp1biAyMDA1CisKKyogRml4IE11cnJheSBKZW5zZW4ncyBtYWlsIGFkZHJlc3MuCisgIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDMwIEp1biAyMDA1CisKKyogUHJlc2VydmUgUEhZX0JNQ1IgZHVyaW5nIGEgc29mdCByZXNldC4KKyAgUGF0Y2ggYnkgQ2FybCBSaWVjaGVycywgMjQgSnVuIDIwMDUKKworKiBWb2ljZUJsdWUgdXBkYXRlOiBlZXByb20gdG9vbCBjYW4gYWxzbyBzdG9yZSBmaXJtd2FyZSB2ZXJzaW9uIG5vdy4KKyAgZWVwcm9tLmJpbiBpcyBydW5hYmxlIGJ5IGp1bXBpbmcgYXQgbG9hZCBhZGRyZXNzLgorICBQYXRjaCBieSBMYWRpc2xhdiBNaWNobCwgMjMgTWF5IDIwMDUKKworKiBNb3ZlIHRoZSBBVDkxUk05MjAwREsgdG8gdGhlIEFSTSBTeXN0ZW1zIGxpc3QuCisgIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDI2IEFwciAyMDA1CisKKyogRWxpbWluYXRlIGNhbGxzIG9mIEFSTSBsaWJnY2MuYSBoZWxwZXIgZnVuY3Rpb25zIF9kaXZzaTMgYW5kIF9tb2RzaTMKKyAgUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjYgQXByIDIwMDUKKworKiBtZWFzdXJlX2djbGsoKSBpcyBuZWVkZWQgd2hlbiBERUJVRyBpcyBlbmFibGVkCisgIFBhdGNoIGJ5IEJyeWFuIE8nRG9ub2dodWUsIDI1IEFwciAyMDA1CisKKyogQWRkIFVQRC1DaGVja3N1bSBjb2RlLCBmaXggcHJvYmxlbSBpbiBuZXQuYyAocmV0dXJuIGluc3RlYWQgb2YgYnJlYWspCisgIFBhdGNoIGJ5IFJlaW5oYXJkIEFybHQsIDEyIEF1ZyAyMDA1CisKKyogZXNkIFBDSTQwNSBib2FyZCB1cGRhdGVkCisgIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCAyOCBKdWwgMjAwNQorCisqIGVzZCBXVUg0MDUgYW5kIERVNDA1IGJvYXJkIHVwZGF0ZWQKKyAgUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI3IEp1bCAyMDA1CisKKyogRml4IHByb2JsZW0gaW4gY21kX25hbmQuYyAob25seSB3aGVuIGRlZmluZWQgQ0ZHX05BTkRfU0tJUF9CQURfRE9UX0kpCisgIFBhdGNoIGJ5IE1hdHRoaWFzIEZ1Y2hzLCA0IE1heSAyMDA1CisKKyogVXBkYXRlIEFNQ0MgWW9zZW1pdGUgdG8gZ2V0IGEgY29uc2lzdGVudCBzZXR1cCBmb3IgYWxsIEFNQ0MgZXZhbAorICBib2FyZHMgKGJhdWRyYXRlLCBlbnZpcm9ubWVudC4uLikuIEZsYXNoIGRyaXZlciBmaXhlZC4KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBBdWcgMjAwNQorCisqIENoYW5nZWQgQU1DQyBCdWJpbmdhICg0MDVFUCkgY29uZmlndXJhdGlvbiB0byBzdXBwb3J0IDJuZCBldGggcG9ydAorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEF1ZyAyMDA1CisKKyogQWRkIE5BTkQgRkxBU0ggc3VwcG9ydCBmb3IgQU1DQyBCYW1ib28gNDQwRVAgZXZhbCBib2FyZAorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEF1ZyAyMDA1CisKKyogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIElGTSBBRVYgRklGTyBib2FyZC4KKyAgTWlub3IgY29kaW5nIHN0eWxlIGNsZWFudXAuCisKKyogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIElGTSBTUEkgZXZhbCBib2FyZAorCisqIEZpeCBDb21wYWN0Rmxhc2ggcHJvYmxlbSBvbiBITUkxMDAxIGJvYXJkCisKKyogTWFrZSBuZXcgIm10ZHBhcnRzIiBjb2RlIGJ1aWxkIHdpdGggb2xkZXIgY29tcGlsZXJzCisgIFBhdGNoIGJ5IEFuZHJlYSBTY2lhbiwgMDkgQXVnIDIwMDUKKworKiBDaGFuZ2VkIENPTkZJR180NDBfR1gsIENPTkZJR180NDBfRVAgYW5kIENPTkZJR180NDBfR1Igb3B0aW9ucyB0bworICBDT05GSUdfNDRHWCwgQ09ORklHXzQ0MEVQIGFuZCBDT05GSUdfNDQwR1IgZm9yIGEgY29uc2lzdGVudCBkZXNpZ24KKyAgd2l0aCB0aGUgNDA1IGRlZmluZXMgYW5kIHRoZSBsaW51eCBrZXJuZWwgZGVmaW5lcy4KKyAgUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwOCBBdWcgMjAwNQorCisqIEZpeCBjb21waWxlciB3YXJuaW5ncyB3aXRoIG9sZGVyIEdDQyB2ZXJzaW9ucworCisqIEFkZCBjb21tb24gKHdpdGggTGludXgpIE1URCBwYXJ0aXRpb24gc2NoZW1lIGFuZCAibXRkcGFydHMiIGNvbW1hbmQKKworICBPbGQsIG9ic29sZXRlIGFuZCBkdXBsaWNhdGVkIGNvZGUgd2FzIGNsZWFuZWQgdXAgYW5kIHJlcGxhY2UgYnkgdGhlCisgIG5ldyBwYXJ0aXRpb25pbmcgbWV0aG9kLiBUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIGFwcHJvYWNoZXMgbm93OgorCisgIFRoZSBmaXJzdCBvbmUgaXMgdG8gZGVmaW5lIGEgc2luZ2xlLCBzdGF0aWMgcGFydGl0aW9uOgorCisgICN1bmRlZiBDT05GSUdfSkZGUzJfQ01ETElORQorICAjZGVmaW5lIENPTkZJR19KRkZTMl9ERVYJCSAibm9yMCIKKyAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFCSAweEZGRkZGRkZGCS8qIHVzZSB3aG9sZSBkZXZpY2UgKi8KKyAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9TSVpFCSAweDAwMTAwMDAwCS8qIHVzZSAxTUIgKi8KKyAgI2RlZmluZSBDT05GSUdfSkZGUzJfUEFSVF9PRkZTRVQJIDB4MDAwMDAwMDAKKworICBUaGUgc2Vjb25kIG1ldGhvZCB1c2VzIHRoZSBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgb3B0aW9uIGFuZCBkeW5hbWljCisgIHBhcnRpdGlvbmluZzoKKworICAvKiBtdGRwYXJ0cyBjb21tYW5kIGxpbmUgc3VwcG9ydCAqLworICAjZGVmaW5lIENPTkZJR19KRkZTMl9DTURMSU5FCisgICNkZWZpbmUgTVRESURTX0RFRkFVTFQJICJub3IxPXp1bWEtMSxub3IyPXp1bWEtMiIKKyAgI2RlZmluZSBNVERQQVJUU19ERUZBVUxUCSAibXRkcGFydHM9enVtYS0xOi0oamZmczIpLHp1bWEtMjotKHVzZXIpIgorCisgIENvbW1hbmQgbGluZSBvZiBjb3Vyc2UgcHJvZHVjZXMgYmlnZ2VyIGltYWdlcywgYW5kIG1heSBiZSBpbmFwcHJvcHJpYXRlCisgIGZvciBzb21lIHRhcmdldHMsIHNvIGJ5IGRlZmF1bHQgaXQncyBvZmYuCisKKyogRml4IGJ1aWxkIHByb2JsZW1zIGZvciBQTTg1NiBCb2FyZAorCisqIEZpeCBzaWduIGV4dGVuc2lvbiBidWcgaW4gJ2ZwZ2EgbG9hZGInIGNvbW1hbmQ7CisgIG1ha2UgJ2ZwZ2EgbG9hZGInIGFsd2F5cyBwcmludCB0aGUgZmlsZSBoZWFkZXIgaW5mbworICBQYXRjaCBieSBBbmRyZXcgRHllciwgMTEgSmFuIDIwMDUKKworKiBGaXggZXJyb3JzIHRoYXQgb2NjdXIgd2hlbiBhY2Nlc3NpbmcgU3lzdGVtQUNFIENGCisgIFBhdGNoIGJ5IEplZmYgQW5naWVsc2tpLCAwOSBKYW4gMjAwNQorCisqIERvY3VtZW50IHN3aXRjaGluZyBiZXR3ZWVuIFUtQm9vdCBhbmQgUGxhbmV0Q29yZSBvbiBSUFhsaXRlCisgIGJ5IFNhbSBTb25nLCAyNCBEZWMgMjAwNAorCisqIEZpeCBQb3dlclFVSUNDIElJIG1hc2sgZGV0ZWN0aW9uLgorICBQYXRjaCBieSBFdWdlbmUgU3Vyb3ZlZ2luLCAyMCBEZWMgMjAwNAorCisqIEFkZCBzdXBwb3J0IGZvciBBbHRlcmEgTklPUyBESzFDMjAgYm9hcmQKKyAgUGF0Y2ggYnkgU2hsb21vIEt1dCwgMTMgRGVjIDIwMDQKKworKiBBZGQgc3VwcG9ydCBmb3IgZXA4MjQ4IGJvYXJkCisgIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDEyIERlYyAyMDA0CisKKyAgTWlub3IgY29kZSBjbGVhbnVwLgorCisqIEZpeCBiYXVkcmF0ZSBzZXR0aW5nIGZvciBLR0RCIG9uIE1QQzgyNjAKKyAgUGF0Y2ggYnkgSG9KaW4sIDExIERlYyAyMDA0CisKKyogRml4ICdtaWkgaGVscCcgdGV4dCBmb3JtYXR0aW5nCisgIFBhdGNoIGJ5IENvcnkgVHVzYXIsIDEwIERlYyAyMDA0CisKKyogRml4IHJldHVybiBjb2RlIG9mIE5GUyBjb21tYW5kCisgIFBhdGNoIGJ5IEhpcm9zaGkgSXRvLCAxMSBEZWMgMjAwNAorCisqIEZpeCB0eXBvCisKKyogRml4IGNvbXBpbGVyIHdhcm5pbmdzIGluIGNwdS9wcGM0eHgvdXNiZGV2LmMKKyAgUGF0Y2ggYnkgU3RldmVuIEJsYWtlc2xlZSwgMDQgQXVnIDIwMDUKKworKiBBZGQgc3VwcG9ydCBmb3IgQU1DQyBCYW1ib28gUFBDNDQwRVAgZXZhbCBib2FyZAorICBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA0IEF1ZyAyMDA1CisKKyogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyCisgIEZpeCBzdHlsZSBpc3N1ZXMgcHJpbWFyaWx5IGluIDg1eHggYW5kIDgzeHggYm9hcmRzLgorICAgIC0gQysrIGNvbW1lbnRzCisgICAgLSBUcmFpbGluZyB3aGl0ZSBzcGFjZQorICAgIC0gSW5kZW50YXRpb24gbm90IGJ5IFRBQgorICAgIC0gRXhjZXNzaXZlIGFtb3VudCBvZiBlbXB0eSBsaW5lcworICAgIC0gVHJhaWxpbmcgZW1wdHkgbGluZXMKKworKiBQYXRjaCBieSBSb24gQWxkZXIsIDExIEp1bCAyMDA1CisgICAgQWRkIFhpYW5naHVhIFhpYW8gYW5kIEx1bnNoZW5nIFdhbmcncyBzdXBwb3J0IGZvciB0aGUKKyAgICBHREEgTVBDODU0MCBFVkFMIGJvYXJkLgorCisqIFBhdGNoIGJ5IEVyYW4gTGliZXJ0eQorICBBZGQgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FsZSBNUEM4MzQ5QURTIGJvYXJkLgorCisqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMjUgSnVsIDIwMDUKKyAgTW92ZSB0aGUgVFNFQyBkcml2ZXIgb3V0IG9mIGNwdS9tcGM4NXh4IGFzIGl0IHdpbGwgYmUgc2hhcmVkCisgIGJ5IHRoZSB1cGNvbWluZyBtcGM4M3h4IGZhbWlseSBhcyB3ZWxsLgorCisqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMDUgTWF5IDIwMDUKKyAgSW1wbGVtZW50ZWQgc3VwcG9ydCBmb3IgTVBDODU0OENEUyBib2FyZC4KKyAgQWRkZWQgRERSIElJIHN1cHBvcnQgYmFzZWQgb24gU1BEIHZhbHVlcyBmb3IgTVBDODV4eCBib2FyZHMuCisgIFRoaXMgcm9sbC11cCBwYXRjaCBhbHNvIGluY2x1ZGVzIGJ1Z2ZpZXMgZm9yIHRoZSBwcmV2aW91c2x5CisgIHB1Ymxpc2hlZCBwYXRjaGVzOgorICAgIEREUklJIENQTywgcHJlIGVUU0VDLCA4NTQ4IExCSVUsIEFuZHkncyBUU0VDLCBlVFNFQyAzJjQgSS9PCisKKyogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxMCBGZWIgMjAwNQorICBBZGQgY29uZmlnIG9wdGlvbiBDT05GSUdfSEFTX0ZFQyBjYWxsaW5nIG91dCA4NTQwIEZFQyBmZWF0dXJlcy4KKworKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIEt1bWFyIEdhbGEsIDA4IEZlYiAyMDA1CisgIEZvciBNUEM4NXh4Q0RTOgorICAgIEFkZHMgUmVsYXhlZCBUaW1pbmcgVFJMWCBiaXQgdG8gRkxBU0ggT1J4IHJlZ3MgdG8gYWxsb3cKKyAgICBmb3IgZmFzdGVyIGZsYXNoIHBhcnRzLgorICAgIEFkZCBkb2N1bWVudGF0aW9uIGZvciBCUi9PUiBmb3IgRkxBU0guCisKKyogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyIDA4IEZlYiAyMDA1CisgIERldGVybWluZSBMMiBDYWNoZSBzaXplIGR5bmFtaWNhbGx5IG9uIDg1WFggYm9hcmRzLgorCisqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgS3VtYXIgR2FsYSAwOCBGZWIgMjAwNQorICAtIENvbnZlcnQgdGhlIENQTTIgYmFzZWQgZnVuY3Rpb25hbGl0eSB0byB1c2UgbmV3IENPTkZJR19DUE0yCisgICAgb3B0aW9uIHJhdGhlciB0aGFuIGEgbXlyaWFkIG9mIENPTkZJR19NUEM4NTYwLWxpa2UgdmFyaWFudHMuCisgICAgQXBwbGllcyB0byBNUEM4NXh4IGFuZCBNUEM4MjYwIGJvYXJkcywgaW5jbHVkZXMgc3R4Z3AzIGFuZCBzYmM4NTYwLgorICAgIEVsaW1pbmF0ZXMgdGhlIENPTkZJR19NUEM4NTYwIG9wdGlvbiBlbnRpcmVseS4gIERpc3RyaWJ1dGVzIHRoZQorICAgIG5ldyBDT05GSUdfQ1BNMiBvcHRpb24gdG8gZWFjaCA4MjYwIGJvYXJkLgorCisqIEFkZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBQTTg1NiBib2FyZAorICBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDAzIEF1ZyAyMDA1CisKKyogTWlub3IgZml4ZXMgdG8gUE04NTQgYm9hcmQKKyAgUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAwMyBBdWcgMjAwNQorCisqIEFkanVzdCBjb25maWd1cmF0aW9uIG9mIFhFTklBWCBib2FyZAorICAoY2hpcCBzZWxlY3QgYW5kIEdQSU8gcmVxdWlyZWQgZm9yIFVTQiBvcGVyYXRpb24pCisKKyogRml4IHR5cG9zIGluIGNwdS84NXh4L3N0YXJ0LlMgd2hpY2ggY2F1c2VkIERhdGFUTEIgZXhjZXB0aW9uIHRvIGJlCisgIHJvdXRlZCB0byB0aGUgV2F0Y2hkb2cgaGFuZGxlcgorICBQYXRjaCBieSBFdWdlbmUgU3Vyb3ZlZ2luLCAxOCBKdW4gMjAwNQorCisqIChyZSllbmFibGVkIHNjc2kgY29tbWFuZHMgZG9fc2NzaSgpIGFuZCBkb19zY3NpYm9vdCgpCisgIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNiBEZWMgMjAwNAorCisqIEZpeCBlbmRpYW5lc3MgcHJvYmxlbSBpbiBURlRQIC8gTkZTIGRlZmF1bHQgZmlsZW5hbWVzCisgIFBhdGNoIGJ5IEhpcm9zaGkgSXRvLCAwNiBEZWMgMjAwNAorCisqIElnbm9yZSBicm9hZGNhc3Qgc3RhdHVzIGJpdCBpbiByZWNlaXZlZCBmcmFtZXMgaW4gODI2MCBGQ0MgZXRoZXJuZXQKKyAgbG9vcGJhY2sgdGVzdCBjb2RlCisgIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDE4IEp1bCAyMDA1CisKKyogRml4IHR5cG8gaW4gbWtjb25maWcgc2NyaXB0ICh1c2VkID09IGluc3RlYWQgb2YgPSkKKyAgUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMTggSnVsIDIwMDUKKworKiBDbGVhbnVwIGJ1aWxkIHByb2JsZW1zIG9uIDY0IGJpdCBidWlsZCBob3N0cworCisqIFVwZGF0ZSBNQUlOVEFJTkVSUyBmaWxlCisKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBBdWcgMjAwNToKKyAgLSBNYWpvciBjbGVhbnVwIGZvciBBTUNDIGV2YWwgYm9hcmRzIFdhbG51dCwgQnViaW5nYSwgRWJvbnksIE9jb3RlYQorICAgIChmb3JtZXIgSUJNIGV2YWwgYm9hcmQpLiBQbGVhc2Ugc2VlICJkb2MvUkVBRE1FLkFNQ0MtZXZhbC1ib2FyZHMtY2xlYW51cCIKKyAgICBmb3IgZGV0YWlscy4KKyAgLSBTeWNhbW9yZSAoUFBDNDA1R1ByKSBldmFsIGJvYXJkIGFkZGVkIChXYWxudXQgcG9ydCBpcyBleHRlbmRlZAorICAgIHRvIHJ1biBvbiBib3RoIDQwNUdQIGFuZCA0MDVHUHIgZXZhbCBib2FyZHMpLgorCisqIFBhdGNoIGJ5IFN0ZXZlbiBCbGFrZXNsZWUsIDI3IEp1bCAyMDA1OgorICAtIEFkZCBzdXBwb3J0IGZvciBBTUNDIFBQQzQ0MEVQL0dSLgorICAtIEFkZCBzdXBwb3J0IGZvciBBTUNDIFlvc2VtaXRlIFBQQzQ0MEVQIGV2YWwgYm9hcmQuCisgIC0gQWRkIHN1cHBvcnQgZm9yIEFNQ0MgWWVsbG93c3RvbmUgUFBDNDQwR1IgZXZhbCBib2FyZC4KKworKiBNaW5vciBmaXhlcyBmb3IgUFBDaGFtZWxlb24gQm9hcmQ6CisgIC0gZml4IGFsaWdubWVudCBvZiBOQU5EIHNpemUKKyAgLSBtYWtlIGNvZGUgZG8gd2hhdCB0aGUgY29tbWVudCBzYXlzCisKKyogSW1wbGVtZW50IGgvdyBzZWN0b3IgcHJvdGVjdGlvbiBzdGF0dXMgc3luY2hyb25pemF0aW9uIGF0IGJvb3QuCisgIFRoZSBjb2RlIGlzIHByb3ZpZGVkIGZvciwgYW5kIHdhcyB0ZXN0ZWQgb24sIHRoZSBZdWtvbi9BbGFza2EKKyAgYW5kIFBNNTIwIGJvYXJkcyBvbmx5LgorCisgIEEgYnVnIGluIGZsYXNoX3JlYWxfcHJvdGVjdCgpIGZvciB0aGUgWXVrb24gYm9hcmQgd2FzIGZpeGVkIGJ5CisgIGFkZGluZyBhIGZ1bmN0aW9uIHRoYXQgdGVsbHMgaWYgdHdvIGJhbmtzIGFyZSBvbiBvbmUgZmxhc2ggY2hpcC4KKworKiBGaXggc3lzbW9uIFBPU1QgcHJvYmxlbTogY2hlY2sgSTJDIGVycm9yIGNvZGVzCisgIFRoaXMgZml4ZXMgYSBwcm9ibGVtIG9mIGRpc3BsYXlpbmcgYm9ndXMgdm9sdGFnZXMgd2hlbiB0aGUgdm9sdGFnZXMKKyAgYXJlIHNvIGxvdyB0aGF0IHRoZSBJMkMgZGV2aWNlcyBzdGFydCBmYWlsaW5nIHdoaWxlIHRoZSByZXN0IG9mIHRoZQorICBzeXN0ZW0ga2VlcHMgcnVubmluZy4KKworKiBQYXRjaCBieSBDZWRyaWMgVmluY2VudCwgNiBKdWwgMjAwNToKKyAgRml4IENGR19DTURfU0VUR0VURENSIGhhbmRsaW5nIGluICJjb21tb24vY21kX2Rjci5jIgorCisqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMjAgSnVsIDIwMDU6CisgIEFkZCBtaXNzaW5nIFBDSSBJTyBwb3J0IGRlZmluaXRpb25zLgorCisqIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCBmb3IgSE1JMTAwMSBib2FyZC4KKworKiBBZGp1c3QgcHJpbnRlZCBib2FyZCBJRCBmb3IgTFdNT04gYm9hcmQuCisKKyogRml4IGxvdy1sZXZlbCBPSENJIHRyYW5zZmVycyBmb3IgQVJNOTIwdCBhbmQgTVBDNXh4eAorCisqIEFkZCBuZXcgYXJndW1lbnQgZm9ybWF0IGZvciBmbGFzaCBjb21tYW5kcyB0byBhbGxvdyBmb3IgdXNhZ2UgbGlrZQorICAiZXJhc2UgJChhZGRyKSArJChmaWxlc2l6ZSkiLCBpLiBlLiBhIHNpemUgYXJndW1lbnQgY2FuIGJlIHVzZWQgYW5kCisgIFUtQm9vdCB3aWxsIGF1dG9tYXRpY2lhbGx5IGZpbmQgdGhlIGVuZCBvZiB0aGUgY29ycmVzcG9uZGluZyBzZWN0b3IuCisKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA1IEp1bCAyMDA1OgorICBVcGRhdGUgdWMxMDAgYm9hcmQgUEhZIHNldHVwCisKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxIEp1bCAyMDA1OgorICBGaXggUEhZIGFkZHJlc3MgZm9yIENBVGNlbnRlciBib2FyZCAobm93IGNvcnJlY3QhKQorCisqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMzAgSnVuIDIwMDU6CisgIEZpeCBQSFkgYWRkcmVzc2VzIGZvciBQUENoYW1lbGVvbiBhbmQgQ0FUY2VudGVyIGJvYXJkcworICBDaGFuZ2UgTUFJTlRBSU5FUiBmb3IgbW9zdCBlc2QgYm9hcmRzCisKKyogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMzAgSnVuIDIwMDU6CisgIEZpeCBMQ0QgbG9nbyBmb3IgbHdtb24gYm9hcmQgd2hpY2ggZ290IGxvc3QgaW4gdGhlIG1lcmdlIG9mIDh4eCBhbmQgUFhBIExDRCBjb2RlCisKKyogRml4IGJhdWRyYXRlIGNhbGN1bGF0aW9uIHByb2JsZW0gb24gTVBDNTIwMCBzeXN0ZW1zCisKKyogQWRkIEVFUFJPTSBhbmQgUlRDIHN1cHBvcnQgZm9yIEhNSTEwMDEgYm9hcmQKKworKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyMCBKdW4gMjAwNToKKyAgRml4IGluaXRpYWxpemF0aW9uIG9mIGxvdyBhY3RpdmUgR1BJTyBwaW5zIG9uIGlua2E0eDAgYm9hcmQKKworKiBFbmFibGUgcmVkdW5kYW50IGVudmlyb25tZW50LCBkaXNhYmxlIEhXIGZsYXNoIHByb3RlY3Rpb24gb2YKKyAgSE1JMTAwMSBib2FyZAorCisqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDEwIEp1biAyMDA1OgorICBJbml0aWFsaXplIGFsbG9jYXRlZCBkZXYgYW5kIHByaXZhdGUgaHcgc3RydWN0dXJlcworICBhZnRlciB0aGVpciByZXNwZWN0aXZlIGFsbG9jYXRpb24gaW4gNDQwZ3hfZW5ldC5jCisKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTAgSnVuIDIwMDU6CisgIEZpeCBieXRlb3JkZXIgcHJvYmxlbXMgd2l0aCBzZWNvbmQgYXJndW1lbnQgb2YgImJvb3RtIiB3aXRoCisgIHN0YW5kYWxvbmUgaW1hZ2VzOworCisqIEFkZCBzdXBwb3J0IGZvciBITUkxMDAxIGJvYXJkCisKKyogRGlzYWJsZSAiZGF0ZSIgYW5kICJzbnRwIiBjb21tYW5kcyBvbiBUUU04NjZNCisKKyogRml4IHdhdGNoZG9nIHJlc2V0IHByb2JsZW1zIG9uIExXTU9OIGJvYXJkCisKKyogUGF0Y2ggYnkgSnVlcmdlbiBTZWxlbnQsIDE3IE1heSAyMDA1OgorICBBZGQgc3VwcG9ydCBmb3IgRnVua3dlcmsgVm9WUE4gZ2F0ZXdheSBtb2R1bGUuCisKKyogQ2xlYW51cCBkZWJ1ZyBjb2RlIGZvciBNUEM4MjIwIEZFQyBkcml2ZXIKKworKiBFeHRlbmQgYnVyc3QgbW9kZSBSQU0gdGVzdCBwcm9ncmFtIHRvIHRha2UgYSBsb29wIGNvdW50CisgICgwID0gaW5maW5pdGUpCisKKyogVXNlIENPTkZJR19EUklWRVJfS1M4Njk1RVRIIHRvIGVuYWJsZSBLUzg2OTUgZXRoZXJuZXQgZHJpdmVyIG9uCisgIHRob3NlIGJvYXJkcyB0aGF0IHVzZSBpdC4KKworKiBQYXRjaGVzIGJ5IEdyZWcgVW5nZXJlciwgMTkgTWF5IDIwMDU6CisgIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBLUzg2OTVQIChBUk0gOTIyIGJhc2VkKSBDUFUKKyAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIE9wZW5HZWFyIENNNDAwOCwgQ000MTE2IGFuZCBDTTQxNDggYm9hcmRzCisKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTkgTWF5IDIwMDU6CisgIEFkZCBzdXBwb3J0IGZvciBDT05GSUdfU0VSSUFMX1RBRyBvbiBBUk0gYm9hcmRzCisKKyogQWRkIFBDSSBzdXBwb3J0IGZvciBTb3JjZXJ5IGJvYXJkLgorICBDb2RlIGNsZWFudXAgKGVzcGVjaWFsbHkgU29yY2VyeSAvIEFsYXNrYSAvIFl1a29uIHNlcmlhbCBkcml2ZXIpLgorCisqIEZpeCBjb21waWxlIHByb2JsZW1zIGNhdXNlZCBieSBuZXcgYnVyc3QgbW9kZSBTRFJBTSB0ZXN0OworICBtYWtlIHBvcnQgcGlucyB0byB0cmlnZ2VyIGxvZ2ljIGFuYWx5emVyIGNvbmZpZ3VyYWJsZQorCisqIEZpeCB0aW1lciBoYW5kbGluZyBvbiBNUEM4NXh4IHN5c3RlbXMKKworKiBGaXggZGVidWcgY29kZSBpbiBvbWFwNTkxMm9zayBmbGFzaCBkcml2ZXIKKworKiBBZGQgc3VwcG9ydCBmb3IgTVBDODI0NyBiYXNlZCAiSURTODI0NyIgYm9hcmQuCisKKyogQWRkIHN1cHBvcnQgZm9yIDIgeCBUU0VDIGludGVyZmFjZXMgb24gdGhlIFRRTTg1NDAgYm9hcmQuCisKKyogT24gTFdNT04gd2UgbXVzdCB1c2UgdGhlIHdhdGNoZG9nIHRvIHJlc2V0IHRoZSBib2FyZCBhcyB0aGUgQ1BVCisgIGdlbmVyZWF0ZWQgSFJFU0VUIHB1bHNlIGlzIHRvbyBzaG9ydCB0byByZXNldCB0aGUgZXh0ZXJuYWwKKyAgY2lyY3VpdHJ5LgorCisqIEFkZCB0ZXN0IHRvb2wgdG8gZXhlcmNpc2UgU0RSQU0gYWNjZXNzZXMgaW4gYnVyc3QgbW9kZQorICAoYXMgc3RhbmRhbG9uZSBwcm9ncmFtLCBNUEM4eHgvUG93ZXJQQyBvbmx5KQorCisqIEluY3JlYXNlIENGR19NT05JVE9SX0xFTiBmb3IgUmF0dGxlciBib2FyZCB0byBtYXRjaCBhY3R1YWwgY29kZQorICBzaXplLgorCisqIE1ham9yIHVwYXRlIG9mIEpGRlMyIGNvZGU7IG5vdyBpbiBzeW5jIHdpdGggc25hcHNob3Qgb2YgTVREIENWUyBvZgorICBNYXJjaCAxMywgMjAwNSk7IG5ldyBjb25maWd1cmF0aW9uIG9wdGlvbiBDT05GSUdfSkZGUzJfTFpPX0xaQVJJCisgIGFkZGVkIHRvIHN1cHBvcnQgTFpPIGFuZCBMWkFSSSBjb21wcmVzc2lvbiBtb2RlcyAodW5kZWZpbmVkIGJ5CisgIGRlZmF1bHQpLgorCisqIEZpeCBwcm9ibGVtIHdpdGggc3ltYm9saWMgbGlua3MgaW4gSkZGUzIgY29kZS4KKworKiBVc2UgbGlua2VyIEFTU0VSVCBzdGF0ZW1lbnQgdG8gcHJldmVudCB1bmRldGVjdGVkIG92ZXJsYXBwaW5nIG9mCisgIHNlY3Rpb25zIG9uIFBQQ2hhbWVsZW9uIGJvYXJkOyBvdGhlciBib2FyZHMgbWlnaHQgdXNlIHRoaXMsIHRvby4KKworKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDAzIE1heSAyMDA1OgorICBVcGRhdGUgZm9yIFAzRzQKKyAgRml4IHByb2JsZW1zIGluIGNtZF91bml2ZXJzZS5jCisKKyogUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDAzIE1heSAyMDA1OgorICBBZGRlZCBtaXNzaW5nIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGluIGNtZF9uYW5kLmMKKyAgTW9kaWZpZWQgQ0ZHX1BDSV9QVE0xTVMgaW4gY29uZmlncy9QTFU0MDUuaCB0byBtYXAgMTI4TUIgcmFtCisKKyogRml4IElOS0E0eDA6IHVzZSBDUzEgYXMgZ3Bpb193a3VwXzYgb3V0cHV0CisKKyogRml4IGJ1ZyBpbiB0aGUgU0RSQU0gaW5pdGlhbGl6YXRpb24gY29kZSBmb3IgY2FubWIsIEljZUN1YmUgYW5kCisgIFBNNTIwIGJvYXJkcy4KKyAgRml4IFBIWSBhZGRyZXNzIGZvciBjYW5tYiBib2FyZC4KKworKiBDbGVhbnVwIHNlcmlhbCBjb25zb2xlIGJhdWRyYXRlIGNhbGN1bGF0aW9uIG9uIEFUOTFSTTkyMDA7CisgIGdldCByaWQgb2Ygb2Jzb2xldGUgQ0ZHX0FUOTFDX0JSR1JfRElWSVNPUiBkZWZpbml0aW9uCisKKyogUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDE4IEFwciAyMDA1OgorICBNYWtlIFBDSSB0YXJnZXQgYWRkcmVzcyBzcGFjZXMgb24gUE1DNDA1IGFuZCBDUENJNDA1IGJvYXJkcworICBjb25maWd1cmFibGUgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlcworCisqIEF1dG8tc2l6ZSBSQU0gb24gY2FubWIgYm9hcmQuCisKKyogQWRkIHN1cHBvcnQgZm9yIGNhbm1iIGJvYXJkCisKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBBcHIgMjAwNToKKyAgVXBkYXRlIGZvciBlc2QgYXBjNDA1CisKKyogRml4ZXMgZm9yIFRRTTg1NjAgYm9hcmQ6CisgIC0gZml4IGNsb2NrIHJhdGVzCisgIC0gcmVtb3ZlIGRlYnVnIG1lc3NhZ2VzCisgIC0gZml4IGZsYXNoIHNlY3RvciBwcm90ZWN0aW9uCisKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDcgQXByIDIwMDU6CisgIEFkZCBpMmNfcmVnX3dyaXRlKCkgYW5kIGkyY19yZWdfd3JpdGUoKSBmb3IgYXQ5MXJtOTIwMCBJMkMKKworKiBQYXRjaGVzIGJ5IFN0ZXZlbiBTY2hvbHosIDA3IEFwciAyMDA1OgorICBGaXggY29tcGlsZXIgd2FybmluZyBpbiBhbHRlcmEuYworICBGaXggd2FybmluZyBpbiBjcHUvYXJtOTIwdC9hdDkxcm05MjAwL2kyYy5jCisKKyogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDA2IEFwciAyMDA1OgorICBGaXggdm9pY2VibHVlIGNvbmZpZ3VyYXRpb24uCisKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwNiBBcHIgMjAwNToKKyAgVXBkYXRlcyBmb3IgT0NPVEVBIGJvYXJkOgorICAtIENoYW5nZWQgVS1Cb290IHNpemUgZnJvbSA1MTJrQnl0ZSB0byAyNTZrQnl0ZQorICAtIEZpeGVkIGZsYXNoIGRyaXZlciB0byBzdXBwb3J0IGJvb3QgZnJvbSBzb2xkZXJlZCB1c2VyIGZsYXNoCisgIC0gQWRkZWQgUkVBRE1FIGZvciBzd2l0Y2ggZnJvbSBQSUJTIGZpcm13YXJlIHRvIFUtQm9vdAorCisqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA1IEFwciAyMDA1OgorICAtIENoYW5nZSB0aW1lciBmcmVxdWVuY3kgZm9yIHBwYyA0NDAgZnJvbSAxMCBtcyB0byAxIG1zLgorICAgIFByb2JsZW0gZm91bmQgYnkgQW5kcmV3IFdvem5pYWsuCisKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDYgQXByIDIwMDU6CisgIC0gY3JlYXRpbmcgU29DIHN1YmRpciBmb3IgQXRtZWwgQVQ5MVJNOTIwMCBjcHUvYXJtOTIwdC9hdDkxcm05MjAwCisgIC0gbW92aW5nIGNvZGUgb3V0IG9mIGNwdS9hdDkxcm05MjAwIGludG8gY3B1L2FybTkyMHQvYXQ5MXJtOTIwMAorCisqIFBhdGNoZXMgYnkgUm9iZXJ0IFdoYWxleSwgMjkgTm92IDIwMDQ6CisgIC0gdXBkYXRlIHRoZSBweGEtcmVncy5oIGZpbGUgZm9yIFBYQTI3eCBjaGlwcworICAtIGFkZCBQWEEyN3ggYmFzZWQgQURTVklYIGJvYXJkCisgIC0gYWRkIHN1cHBvcnQgZm9yIE1NQyBvbiBQWEEyN3ggcHJvY2Vzc29ycworCisqIFBhdGNoIGJ5IEFuZHJldyBFLiBNaWxlc2tpLCAyOCBOb3YgMjAwNDoKKyAgRml4IFBQQzR4eCBTUEQgU0RSQU0gZGV0ZWN0aW9uIGJ1ZworCisqIFBhdGNoIGJ5IEhpcm9zaGkgSXRvLCAyNiBOb3YgMjAwNDoKKyAgRml4IGxvZ2ljIG9mICJ0ZXN0IC16IiBhbmQgInRlc3QgLW4iIGNvbW1hbmRzCisKKyogUGF0Y2ggYnkgTGFkaXNsYXYgTWljaGwsIDA1IEFwciAyMDA1OgorICBBZGQgc3VwcG9ydCBmb3IgVm9pY2VCbHVlIGJvYXJkLgorCisqIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAwNSBBcHIgMjAwNToKKyAgRml4IG5ldGJvb3RfY29tbW9uKCkgcHJvdG90eXBlcy4KKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNSBBcHIgMjAwNToKKyAgVXNlIGkuTVggd2F0Y2hkb2cgdGltZXIgZm9yIHJlc2V0X2NwdSgpCisKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDUgQXByIDIwMDU6CisgIE1vdmUgcmVzZXRfY3B1KCkgb3V0IG9mIGNwdS9hcm05MjB0L3N0YXJ0LlMgaW50byB0aGUgU29DIHNwZWNpZmljCisgIHN1YmRpcmVjdG9yaWVzIGNwdS9hcm05MjB0L2lteC8gYW5kIGNwdS9hcm05MjB0L3MzYzI0eDAvCisgIChub3cgaW4gaW50ZXJ1cHRzLmMpCisKKyogQWRkIHN1cHBvcnQgZm9yIE1QQzgyMjAgYmFzZWQgInNvcmNlcnkiIGJvYXJkLgorCisqIEFkZCBzdXBwb3J0IGZvciBUUU04NTYwIGJvYXJkLgorCisqIEFkZCBGRUMgc3VwcG9ydCBmb3IgVFFNODU0MCBib2FyZC4KKyAgSW50ZXJmYWNlcyBhcmUgbmFtZWQgYXMgZm9sbG93czogIkVORVQxIiAtIFRTRUMyLCAiRU5FVDIiIC0gRkVDCisKKyogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDQgQXByIDIwMDU6CisgIFVwZGF0ZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIENNQ19QVTIgYm9hcmQuCisKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDQgQXByIDIwMDU6CisgIC0gcmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIENPTkZJR19JTklUX0NSSVRJQ0FMIGZvciBBUk0gYmFzZWQgYm9hcmRzCisgIC0gaW50cm9kdWNlIHR3byBuZXcgY29uZmlndXJhdGlvbiBvcHRpb25zIGluc3RlYWQ6CisgICAgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVCBhbmQgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNCBBcHIgMjAwNToKKyAgTWFrZSBzdXJlIHRoYXQgTURJTyBjbG9jayBkb2VzIG5vdCBleGNlZWQgMi41IE1IeiBvbiBBVDkxCisKKyogRml4IHRpbWVyIGNvZGUgZm9yIEFSTSBzeXN0ZW1zOiBtYWtlIHN1cmUgdGhhdCB1ZGVsYXkoKSBkb2VzIG5vdAorICByZXNldCB0aW1lcnMgc28gaXQncyBzYXZlIHRvIHVzZSB1ZGVsYXkoKSBpbiB0aW1lb3V0IGNvZGUuCisKKyogUGF0Y2ggYnkgTWF0aGlhcyBL/HN0ZXIsIDIzIE5vdiAyMDA0OgorICBhZGQgdWRlbGF5IHN1cHBvcnQgZm9yIHRoZSBtY2Y1MjgyIGNwdQorCisqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDE2IE5vdmVtYmVyIDIwMDQ6CisgIGZpeCBpbmNvcnJlY3Qgb25ib2FyZCBYaWxpbnggQ1BMRCBiYXNlIGFkZHJlc3MKKworKiBQYXRjaCBieSBKZXJyeSBWYW4gQmFyZW4sIDA4IE5vdiAyMDA0OgorICAtIEFkZCBsb3ctYm9vdCBvcHRpb24gZm9yIE1QQzgyNjBBRFMgYm9hcmQgKGlmIGxvd2Jvb3QgaXMgc2VsZWN0ZWQsCisgICAgdGhlIGp1bXBlciBmb3IgdGhlIEhSQ1cgc291cmNlIHNob3VsZCBzZWxlY3QgZmxhc2guIElmIGxvd2Jvb3QgaXMKKyAgICBub3Qgc2VsZWN0ZWQsIHRoZSBqdW1wZXIgZm9yIHRoZSBIUkNXIHNvdXJjZSBzaG91bGQgc2VsZWN0IHRoZQorICAgIEJDU1IuCisgIC0gY2hhbmdlIGRlZmF1bHQgbG9hZCBiYXNlIGFkZHJlc3MgdG8gMHgwMDQwMDAwMAorCisqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA4IE5vdiAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgQW5hbG9ndWUgJiBNaWNybyBSYXR0bGVyIGJvYXJkcy4KKyAgVGVzdGVkIG9uIFJhdHRsZXI4MjQ4LgorCisqIFBhdGNoIGJ5IEFuZHJlIFJlbmF1ZCwgMDggTm92IDIwMDQ6CisgIEZpeCB3YXRjaGRvZyBzdXBwb3J0IGluIGNvbW1vbi9sY2QuYworCisqIFBhdGNoIGJ5IE1hcmMgTGVlbWFuLCAwNSBOb3YgMjAwMzoKKyAgRW5hYmxlIGFsbCA0IFBDTUJSVyBidWZmZXJzIGZvciB0aGUgTVBDODI0NSBwcm9jZXNzb3Igc2luY2UgdGhlIENQVQorICBidWcgb25seSBhZmZlY3RzIHRoZSBYUEM4MjQ1IHByb2Nlc3NvcnMKKworKiBQYXRjaGVzIGJ5IEpvc2VmIFdhZ25lciwgMjkgT2N0IDIwMDQ6CisgIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIENQVTg3IGJvYXJkCisgIC0gQWRkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIFBNODU0IGJvYXJkCisKKyogUGF0Y2ggYnkgSmlhbiBaaGFuZywgMDIgTm92IDIwMDQ6CisgIEFkZCAxNi1iaXQgTkFORCBzdXBwb3J0CisKKyogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwMSBOb3YgMjAwNDoKKyAgQWRkIG1pc3NpbmcgTklPUy9OSU9TMiBzdXBwb3J0IGZvciAiaW1pbmZvIiBjb21tYW5kCisKKyogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjkgT2N0IDIwMDQ6CisgIEFkZCBtaXNzaW5nIE5JT1MvTklPUzIgc3VwcG9ydCBmb3IgIm1raW1hZ2UiIHRvb2wuCisKKyogUGF0Y2ggYnkgRGF2aWQgQWRhaXIsIDI3IE9jdCAyMDA0OgorICBBZGQgbWlzc2luZyA0NDBHWCBTRFJBTSBDb250cm9sbGVyIHJlc2V0CisKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjUgT2N0IDIwMDQ6CisgIERlY2xhcmUgcmVzZXRfY3B1KCkgaW4gaW5jbHVkZS9jb21tb24uaCBpbnN0ZWFkIGxvY2FsbHkKKworKiBQYXRjaCBieSBZdXNkaSBTYW50b3NvLCAyMiBPY3QgMjAwNDoKKyAgLSBBZGQgc3VwcG9ydCBmb3IgSElEREVOX0RSQUdPTiBib2FyZAorICAtIGZpeCBlbmRpYW5lc3MgcHJvYmxlbSBpbiBkcml2ZXIvcnRsMTgzOS5jCisKKyogUGF0Y2ggYnkgQWxsZW4gQ3VydGlzLCAyMSBPY3QgMjAwNDoKKyAgc3VwcG9ydCBtdWx0aXBsZSBzZXJpYWwgcG9ydHMKKworKiBQYXRjaCBieSBSaWNoYXJkIEtsaW5nbGVyLCAwMyBBcHIgMjAwNToKKyAgQWRkIGNhbGwgdG8gZXRoX2hhbHQoKSBpbiBuZXQvbmV0LmMgd2hlbiBjYWxsZWQgZnVuY3Rpb25zIGZhaWwKKyAgYWZ0ZXIgZXRoX2luaXQoKSBoYXMgYmVlbiBjYWxsZWQuCisKKyogUGF0Y2ggYnkgU2FtIFNvbmcsIDMgQXByaWwgMjAwNToKKyAgLSBVcGRhdGUgUkVBRE1FLk5ldGNvbnNvbGUKKyAgLSBVcGRhdGUgUkVBRE1FCisKKyogUHJlcGFyZSBmb3IgU29DIHJld29yayBvZiBBUk0gY29kZToKKyAgLSByZW5hbWUgQ09ORklHX0JPT1RCSU5GVU5DIGludG8gIENPTkZJR19JTklUX0NSSVRJQ0FMCisgIC0gcmVuYW1lIG1lbXNldHVwIGludG8gbG93bGV2ZWxfaW5pdCAoZnVuY3Rpb24gbmFtZSBhbmQgc291cmNlIGZpbGVzKQorICBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwMyBBcHIgMjAwNToKKyAgLSBjcmVhdGUgU29DIHNwZWNpZmljIGRpcmVjdG9yaWVzIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlteCBhbmQKKyAgICBpbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNHgwCisKKyogRml4IHByb2JsZW1zIHdpdGggU05UUCBzdXBwb3J0OworICBlbmFibGUgU05UUCBzdXBwb3J0IGluIHNvbWUgYm9hcmRzLgorCisqIFBhdGNoZXMgYnkgTWFydGluIEtyYXVzZSwgMDEgQXByIDIwMDU6CisgIC0gRml4IGZsYXNoIGVyYXNlIHRpbWVvdXQgb24gQ01DX1BVMgorICAtIEFkZCBhdXRvbWF0aWMgSFcgZGV0ZWN0aW9uIGZvciBDTUNfUFUyIGFuZCBDTUNfQkFTSUMKKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMyBNYXJjaCAyMDA1OgorICBmaXggY2FjaGUgZW5hYmxpbmcgZm9yIEFUOTFSTTkyMDAKKworKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAzMCBNYXIgMjAwNToKKyAgYWRkIFNOVFAgc3VwcG9ydCBhbmQgZXhwYW5kIHRpbWUgc2VydmVyIGFuZCB0aW1lIG9mZnNldCBmaWVsZHMgb2YKKyAgREhDUCBzdXBwb3J0LiBTZWUgZG9jL1JFQURNRS5TTlRQCisKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTMgRGVjIDIwMDQ6CisgIEZpeCBidWcgaW4gYXQ5MXJtOTIwIGV0aGVybmV0IGRyaXZlcgorCisqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDEzIERlYyAyMDA0OgorICBSZW1vdmUgZHVwbGljYXRlZCBjb2RlIGJ5IG1lcmdpbmcgbWVtc2V0dXAuUyBmaWxlcyBmb3IKKyAgYXQ5MXJtOTIwMCBib2FyZHMgaW50byBvbmUgY3B1L2F0OTFybTkyMDAvbG93bGV2ZWwuUworCisqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDMxIE1hciAyMDA1OgorICBDbGVhbnVwIGR1cGxpY2F0ZSBkZWZpbml0aW9uIG9mIG92ZXJ3cml0ZV9jb25zb2xlKCkKKworKiBVcGRhdGUgVFFNNTIwMCBjb25maWd1cmF0aW9uOworICBwcmVwYXJlIGZvciBSZXYuIDIwMCBzdGFydGVyIGtpdCBib2FyZHMKKworKiBQYXRjaCBieSBTY290dCBNY051dHQsIDIxIE9jdCAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgTmlvcy1JSSBFUENTIENvbnRyb2xsZXIgY29yZS4KKworKiBQYXRjaCBieSBTY290dCBNY051dHQsIDIwIE9jdCAyMDA0OgorICBOaW9zLUlJIGNsZWFudXBzOgorICAtIEFkZCBzeXNpZCBjb21tYW5kIChOaW9zLUlJIG9ubHkpLgorICAtIExvY2F0ZSBkZWZhdWx0IGV4Y2VwdGlvbiB0cmFtcG9saW5lIGF0IHByb3BlciBvZmZzZXQuCisgIC0gSW1wbGVtZW50IEkvTyByb3V0aW5lcyAocmVhZGIsIHdyaXRlYiwgZXRjKQorICAtIEltcGxlbWVudCBkb19ib290bV9saW51eAorCisqIFBhdGNoZXMgYnkgTWFydGluIEtyYXVzZSwgMjIgTWFyIDIwMDU6CisgIC0gdXNlIFRRTTUyMDBfYXV0byBhcyBNQUtFQUxMIHRhcmdldCBmb3IgVFFNNTIwMCBzeXN0ZW1zCisgIC0gYWRkIHN1cHBvcnQgZm9yIFNNNTAxIGdyYXBoaWNzIGNvbnRyb2xsZXIKKyAgLSBhZGQgc3VwcG9ydCBmb3IgZ3JhcGhpYyBjb25zb2xlIG9uIFRRTTUyMDAKKyAgLSBhZGQgc3VwcG9ydCBmb3IgVFFNNTIwMCBSZXYgMjAwCisgIC0gY2xlYW51cCwgZml4IHR5cG8gaW4gaW5jbHVkZS9jb25maWdzL1RRTTUyMDAuaAorCisqIFBhdGNoIGJ5IE1hbmZyZWQgQmFyYWwsIDE3IE1hciAyMDA1OgorICBGaXggdHlwbworCisqIEZpeCBSVEMgY29uZmlndXJhdGlvbiBmb3IgUFBDaGFtZWxlb24gYm9hcmQKKworKiBDbGVhbnVwLCBmaXggdHlwbyBpbiBpbmNsdWRlL2NvbmZpZ3MvVFFNNTIwMC5oCisKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBNYXIgMjAwNToKKyAgVXBkYXRlIGZvciBlc2QgYXV0b191cGRhdGUgYW5kIGhoNDA1IGJvYXJkCisKKyogQWRhcHQgZm9yIFUtQm9vdCBpbWFnZSBzaXplIChuZXcgZmVhdHVyZXMgZW5hYmxlZCkgb24gVFFNNTIwMAorCisqIFVwZGF0ZSBjb2RlIGZvciBUUU04NTQwIGJvYXJkIChhbmQgODV4eCBpbiBnZW5lcmFsKToKKyAgLSBDaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIEV0aGVybmV0IGRyaXZlcjogTU9UTyBFTkVUIC0+IEVORVQKKyAgLSBSZWZvcm1hdCBib290IG1lc3NhZ2VzCisgIC0gRW5hYmxlIHJlZHVuZGFudCBlbnZpcm9ubWVudAorICAtIFJlcGxhY2UgdGhlIC1PMiBvcHRpbWl6YXRpb24gZmxhZyB3aXRoIC1tbm8tc3RyaW5nCisKKyogUGF0Y2ggYnkgRGF2aWQgQnJvd25lbGwsIDEwIE1hciAyMDA1OgorICBSZXN0b3JlIGNvcHlyaWdodCBzdGF0ZW1lbnRzIGluIE9IQ0kgZHJpdmVycy4KKworKiBBZGQgc3VwcG9ydCBmb3IgVFFNODU0MCBib2FyZAorCisqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDE0IE1hciAyMDA1OgorICBOQzY1MDogY2hhbmdlZCBOQU5EIGZsYXNoIGFkZHJlc3NpbmcgdG8gdXNpbmcgVVBNQgorCisqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTQgTWFyIDIwMDU6CisgIFVwZGF0ZSBmb3IgZXNkIHZvaDQwNSBmcGdhIGltYWdlCisKKyogSU5LQTR4MDogQWxsb3cgaW5pdGlhbGl6YXRpb24gb2YgTENEIGJhY2tsaWdodCBkaW1taW5nIGZyb20KKyAgImJyaWdodG5lc3MiIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisqIEFkZCBwb3J0IGluaXRpYWxpemF0aW9uIGZvciBkaWdpdGFsIEkvTyBvbiBJTktBNHgwCisKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAwMSBNYXIgMjAwNToKKyAgVXBkYXRlIGZvciBlc2QgYm9hcmRzIGRwNDA1IGFuZCBodWI0MDUKKworKiBGaXggZ2V0X3BhcnRpdGlvbl9pbmZvKCkgcGFyYW1ldGVyIGVycm9yIGluIGFsbCBvdGhlciBjYWxscworICAoY29tbW9uL2NtZF9pZGUuYywgY29tbW9uL2NtZF9yZWlzZXIuYywgY29tbW9uL2NtZF9zY3NpLmMpLgorCisqIEVuYWJsZSBVU0IgYW5kIElERSBzdXBwb3J0IGZvciBJTktBNHgwIGJvYXJkCisKKyogUGF0Y2ggYnkgQW5kcmV3IER5ZXIsIDI4IEZlYiAyMDA1OgorICBmaXggZXh0MmxvYWQgcGFzc2luZyBhbiBpbmNvcnJlY3QgcG9pbnRlciB0byBnZXRfcGFydGl0aW9uX2luZm8oKQorICByZXN1bHRpbmcgaW4gbG9hZCBmYWlsdXJlIGZvciBkZXZpY2VzIG90aGVyIHRoYW4gMAorCisqIEFkZCBzdXBwb3J0IGZvciBTUkFNIGFuZCAyIHggUXVhZCBVQVJUcyBvbiBJTktBNHgwIGJvYXJkCisKKyogQ2xlYW51cCBVU0IgYW5kIHBhcnRpdGlvbiBkZWZpbmVzCisKKyogQWRkIHN1cHBvcnQgZm9yIGV4dDIgZmlsZXN5c3RlbXMgYW5kIGltYWdlIHRpbWVzdGFtcHMgdG8gVFFNNTIwMCBib2FyZAorCisqIEFkZCByZXNldCBjb2RlIGZvciBDb3JhbC1QIG9uIElOS0E0eDAgYm9hcmQKKworKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyOCBKdW4gMjAwNDoKKyAgVXBkYXRlIGZvciBUUkFCIGJvYXJkLgorCisqIEZpeCBzb21lIG1pc3NpbmcgInZvbGF0aWxlInMgaW4gTVBDNXh4eCBGRUMgZHJpdmVyCisKKyogRml4IGNpcnJ1cyB2b2x0YWdlIGRldGVjdGlvbiAoZm9yIENQQzQ1KQorCisqIEZpeCBieXRlb3JkZXIgcHJvYmxlbSBpbiB1c2Jib290IGFuZCBzY3NpYm9vdCBjb21tYW5kcy4KKworKiBQYXRjaCBieSBDYWp1cyBIYWhuLCAwNCBGZWIgMjAwNToKKyAgLSBkb24ndCBpbnNpc3Qgb24gbGVhZGluZyAnLycgZm9yIGZpbGVuYW1lIGluIGV4dDJsb2FkCisgIC0gc2V0IGRlZmF1bHQgcGFydGl0aW9uIHRvIHVzZWZ1bCB2YWx1ZSAoMSkgaW4gZXh0MmxvYWQKKworKiBQYXRjaCBieSBBbmRyZXcgRHllciwgMDggSmFuIDIwMDU6CisgIGZpeCB3cm9uZyByZXR1cm4gY29kZXMgaW4gZXh0MiBjb2RlCisKKyogUmVtb3ZlZCAnLS1uby13YXJuLW1pc21hdGNoJyBvcHRpb24gZnJvbSBNYWtlZmlsZS4gVGhpcyBvcHRpb24KKyAgbWFrZXMgJ2xkJyB0byBvdmVybG9vayBiaW5hcnkgb2JqZWN0cyBjb21wYXRpYmlsaXR5LgorCisqIE1vdmVkICQoUExBVEZPUk1fTElCUykgZnJvbSB0aGUgbGlicmFyeSBncm91cCAoLS1zdGFydC1ncm91cCAuLi4KKyAgLS1lbmQtZ3JvdXApIG91dHNpZGUgb2YgdGhlIGdyb3VwLiBUaGlzIHdpbGwgbWFrZSAnbGQnIHRvIGRvCisgIF9tdWx0aXBsZV8gc2VhcmNoIGluIHRoZSBsaWJyYXJ5IGdyb3VwIHdoZW4gcmVzb2x2aW5nIHN5bWJvbAorICByZWZlcmVuY2VzIGFuZCBkbyBvbmx5IGEgX3NpbmdsZV8gc2VhY2ggaW4gbGliZ2NjLmEgYWZ0ZXIgdGhlIGdyb3VwCisgIHNlYXJjaC4KKworKiBGaXggc3RhYmlsaXR5IHByb2JsZW1zIG9uIENQQzQ1IGJvYXJkIGFnYWluLgorCisqIE1ha2UgaW1hZ2UgZGV0ZWN0aW9uIGZvciBkaXNrYm9vdCAvIHVzYmJvb3QgLyBzY3NpYm9vdCBtb3JlIHJvYnVzdAorICAoYWxzbyBjaGVjayBoZWFkZXIgY2hlY2tzdW0pCisKKyogVXBkYXRlIENQQzQ1IGJvYXJkIGNvbmZpZ3VyYXRpb24uCisKKyogQWRkIFVTQiBhbmQgUENJIHN1cHBvcnQgZm9yIElOS0E0eDAgYm9hcmQKKworKiBGaXggSURFIHN0YWJpbGl0eSBwcm9ibGVtcyBvbiBDUEM0NSBib2FyZCAobmVlZHMgMiB4IEVJRUlPKS4KKworKiBDb2RlIGNsZWFudXAKKworKiBQYXRjaCBieSBSb2JpbiBHZXR6LCAxMyBPY3QgMjAwNDoKKyAgQWRkIHN0YW5kYWxvbmUgYXBwbGljYXRpb24gdG8gY2hhbmdlIFNNQzkxQzExMSBNQUMgYWRkcmVzc2VzLAorICBzZWUgZXhhbXBsZXMvUkVBRE1FLnNtYzkxMTExX2VlcHJvbQorCisqIFBhdGNoIGJ5IFhpYW9nZW5nIChTaGF3bikgSmluLCAxMiBPY3QgMjAwNDoKKyAgRml4IEZsYXNoIHN1cHBvcnQgZm9yIEFSTSBJbnRlZ3JhdG9yIENQLgorCisqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDEwIEphbiAyMDA1OgorICBVcGRhdGUgc3VwcG9ydCBmb3IgT01BUDI0MjAgKEFSTTExKSBhbmQgSDQgYm9hcmQ6CisgIG8gY2xlYW4gdXAgYW5kIGFkZCBuZXcgdHlwZXMgdG8gSDQgbWVtb3J5IHByb2JlIGNvZGUuCisgIG8gZml4IHRvIHdvcmsgd2l0aCBpbnRlcm5hbCBib290LgorICBvIGFkZGVkIFBSQ00gY29uZmlnIElJSSBvcGVyYXRpb24uCisgIG8gZml4IG1hcmdpbmFsIGZsYXNoIHRpbWluZ3MuCisgIG8gYWRkIHJldmlzb24gQVRBRyB1c2FnZS4KKyAgbyBlbmFibGUgdm9sdGFnZSBzY2FsaW5nIGF0IHBvd2VyIGNoaXAuCisgIG8gZml4IGNvbXBpbGUgZXJyb3IgZm9yIGkyYy4KKworKiBGaXggbmV0d29yayBwcm9ibGVtIChlcnJvciB3aGVuIHJlY2VpdmluZyBtdWx0aXBsZSBBUlAgcGFja2V0cykKKworKiBQYXRjaCBieSBEYW5pZWwgUG9pcm90LCAxMiBPY3QgMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIFdpbmQgUml2ZXIgc2JjNDA1IGJvYXJkCisKKyogUGF0Y2ggYnkgUmFpbmVyIEJyZXN0YW4sIDEyIE9jdCAyMDA0OgorICBNYWtlIGV4YW1wbGVzL01ha2VmaWxlIG1vcmUgcm9idXN0CisKKyogUGF0Y2ggYnkgU2FtIFNvbmcsIDExIE9jdG9iZXIgMjAwNDoKKyAgLSBBZGQgUkVTRVQvUFJFQk9PVC9BVVRPQk9PVCBzdXBwb3J0IGZvciBSUFhsaXRlX0RXIGJvYXJkCisgIC0gQWRqdXN0IENQVTpCVVMgZnJlcXVlbmN5IHJhdGlvIDE6MSB3aGVuIGNvcmUgZnJlcXVlbmN5CisgICAgbGVzcyB0aGFuIDUwTUh6CisKKyogUGF0Y2ggYnkgU2FtIFNvbmcsIDEwIE9jdCAyMDA0OgorICBGaXggYSBwYXJhbWV0ZXIgZXJyb3IgaW4gcnVuX2NvbW1hbmQoKSBpbiBtYWluLmMKKworKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAwMSBPY3QgMjAwNDoKKyAgYWRkIHN1cHBvcnQgZm9yIHRoZSBUSSBPTUFQMjQyMCBwcm9jZXNzb3IgYW5kIGl0cyBINCByZWZlcmVuY2UKKyAgYm9hcmQKKworKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbGVncmluLCAyNCBTZXAgMjAwNDoKKyAgQWRkZWQgc3VwcG9ydCBmb3IgTkUyMDAwIGNvbXBhdGlibGUgKERQODM5MCwgRFA4MzkwMikgTklDcy4KKworKiBQYXRjaCBieSBMZWlmIExpbmRob2xtLCAyMyBTZXAgMjAwNDoKKyAgYWRkIHN1cHBvcnQgZm9yIHRoZSBBTUQgZGIxNTUwIGJvYXJkCisKKyogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMTUgU2VwIDIwMDQ6CisgIEFkZCBDT05GSUdfU0VSSUFMX01VTFRJIHN1cHBvcnQgZm9yIHBwYzR4eCwKKyAgdXBkYXRlIFJFQURNRS5zZXJpYWxfbXVsdGkKKworKiBQYXRjaGVzIGJ5IERhdmlkIFNub3dkb24sIDA3IFNlcCAyMDA0OgorICAtIGFkZCB1LWJvb3QuaGV4IHRhcmdldCBpbiB0aGUgdG9wIGxldmVsIE1ha2VmaWxlCisgIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBVTlNXL05JQ1RBIFBMRUIgMiBib2FyZCAocGxlYjIpCisgIC0gdXNlIC1tdHVuZT14c2NhbGUgYW5kIC1tYXJjaD1hcm12NSBvcHRpb25zIGZvciBQWEEKKworKiBQYXRjaCBieSBGbG9yaWFuIFNjaGxvdGUsIDA4IFNlcCAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgU2VuVGVjLUNPQlJBNTI3Mi1ib2FyZCAoQ29sZEZpcmUpLgorCisqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMDcgU2VwIDIwMDQ6CisgIG1wYzgyNHg6IHNldCBQQ0kgbGF0ZW5jeSB0aW1lciB0byBhIHNhbmUgdmFsdWUKKyAgKGlzIDAgYWZ0ZXIgcmVzZXQpLgorCisqIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAwMyBTZXAgMjAwNDoKKyAgQWRkIGJpdHN0cmVhbSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgZnBnYSBjb21tYW5kIChYaWxpbnggb25seSkuCisKKyogUGF0Y2ggYnkgS3VydCBTdHJlbWVyY2gsIDAzIFNlcCAyMDA0OgorICBBZGQgWGlsaW54IFNwYXJ0YW4yRSBmYW1pbHkgRlBHQSBzdXBwb3J0CisKKyogUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDAyIFNlcCAyMDA0OgorICBBZGQgQWRkZWQgc3VwcG9ydCBmb3IgSDIgcmV2aXNpb24gb2YgdGhlIEVQODI2MCBib2FyZC4KKyAgRml4ZWQgZm9ybWF0dGluZyBmb3Igc29tZSBvZiB0aGUgRVA4MjYwIHJlbGF0ZWQgc291cmNlIGZpbGVzLgorCisqIFBhdGNoIGJ5IEpvbiBMb2VsaWdlciwgMDIgU2VwIDIwMDQ6CisgIFJlc2V0IG1vbml0b3Igc2l6ZSBiYWNrIHRvIDI1NiBzbyBlbnZpcm9ubWVudCBjYW4gYmUgd3JpdHRlbgorICB0byBmbGFzaCBvbiBNUEM4NXh4IEFEUyBhbmQgQ0RTIHJlbGVhc2VzLgorCisqIFBhdGNoIGJ5IFBhb2xvIEJyb2dnaW5pLCAwMiBTZXAgMjAwNDoKKyAgTWFrZSBCU1MgY2xlYXJpbmcgb24gQVJNIHN5c3RlbXMgbW9yZSByb2J1c3QKKworKiBQYXRjaCBieSBZdWUgSHUgYW5kIEpvZSwgMDEgU2VwIDIwMDQ6CisgIC0gYWRkIFBDSSBzdXBwb3J0IGZvciBpeHA0MjU7CisgIC0gYWRkIEVFUFJPMTAwIHN1cHBvciB0Zm9yIGl4ZHA0MjUgYm9hcmQuCisKKyogRml4IHByb2JsZW0gd2l0aCBwcm90ZWN0ZWQgc2VjdG9yIGRldGVjdGlvbiBpbiBkcml2ZXIvY2ZpX2ZsYXNoLmMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4yOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIENvZGUgY2xlYW51cCwgbW9zdGx5IGZvciBHQ0MtMy4zLngKKworKiBDbGVhbnVwIGNvbmZ1c2luZyB1c2Ugb2YgQ09ORklHX0VUSCpBRERSIC0gdXN0IGhpcyBvbmx5IHRvCisgIHByZS1kZWZpbmUgYSBNQUMgYWRkcmVzczsgdXNlIENPTkZJR19IQVNfRVRIKiB0byBlbmFibGUgc3VwcG9ydCBmb3IKKyAgYWRkaXRpb25hbCBldGhlcm5ldCBhZGRyZXNzZXMuCisKKyogQ2xlYW51cCBkcml2ZXJzL2k4MjM2NS5jIC0gYXZvaWQgZHVwbGljYXRpb24gb2YgY29kZQorCisqIEZpeCBib2d1cyAiY2Fubm90IHNwYW4gYWNyb3NzIGJhbmtzIiBmbGFzaCBlcnJvciBtZXNzYWdlCisKKyogQ29kZSBjbGVhbnVwCisKKyogQWRkIHN1cHBvcnQgZm9yIENvbXBhY3RGbGFzaCBmb3IgdGhlIENQQzQ1IEJvYXJkLgorCisqIEZpeCBwcm9ibGVtcyB3aXRoIENNQ19QVTIgZmxhc2ggZHJpdmVyLgorCisqIENsZWFudXA6CisgIC0gYXZvaWQgdHJpZ3JhcGggd2FybmluZyBpbiBmcy9leHQyL2V4dDJmcy5jCisgIC0gcmVuYW1lIFVDMTAwIC0+IHVjMTAwCisKKyogQWRkIHN1cHBvcnQgZm9yIFVDMTAwIGJvYXJkCisKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBEZXogMjAwNDoKKyAgLSBleHQyZnMgc3VwcG9ydCBhZGRlZAorICAtIFR1bmRyYSB1bml2ZXJzZSBzdXBwb3J0IGFkZGVkCisgIC0gQ29sZEZpcmUgTUNGNTI0OSBzdXBwb3J0IGFkZGVkIChubyBwcmVsb2FkZXIgbmVlZGVkISkKKyAgLSBNQ0Y1MjQ5IGJvYXJkIFRBU1JFRyBhZGRlZAorICAtIFBQQyBib2FyZHMgYWRkZWQ6IEFQQzQwNSwgQ1BDSTQwNURULCBDUENJNzUwLCBHMjAwMCwgSEg0MDUsCisgICAgVk9NNDA1LCBXVUg0MDUKKyAgLSBzb21lIGVzZCBib2FyZHMgdXBkYXRlZAorICAtIG1lbW9yeSBjb21tYW5kcyAibWRjIiBhbmQgIm13YyIgYWRkZWQgZm9yIGN5Y2xpYyByZWFkL3dyaXRlCisgICAgKENPTkZJR19NWF9DWUNMSUMsIHNlZSBSRUFETUUgZm9yIGZ1cnRoZXIgZGVzY3JpcHRpb24pCisKKyogQWRkIHN1cHBvcnQgZm9yIElOS0E0WDAgYm9hcmQKKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxMiBEZWMgMjAwNDoKKyAgRml4IHR5cG8gaW4gQVQ5MSBtZW1vcnkgc2V0dXAuCisKKyogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMjcgT2N0IDIwMDQ6CisgIC0gYWRkIHN1cHBvcnQgZm9yICJTVEs1Mnh4IiBib2FyZCAoaW5jbHVkaW5nIFBTLzIgbXVsdGlwbGV4ZXIpCisgIC0gYWRkIGhhcmR3YXJlIGRldGVjdGlvbiBmb3IgVFFNNTIwMAorCisqIENsZWFuIHVwIENNQyBQVTIgZmxhc2ggZHJpdmVyCisKKyogVXBkYXRlIE1BSU5UQUlORVJTIGZpbGUKKworKiBGaXggYnVnIGluIE1QQzgyMyBMQ0QgZHJpdmVyCisKKyogRml4IHVkZWxheSgpIG9uIEFUOTFSTTkyMDAgZm9yIGRlbGF5cyA8IDEgbXMuCisKKyogRW5hYmxlIGxvbmcgaGVscCBvbiBDTUMgUFUyIGJvYXJkOworICBmaXggcmVzZXQgaXNzdWU7CisgIGluY3JlYXNlIENQVSBzcGVlZCBmcm9tIDE3OSB0byAyMDcgTUh6LgorCisqIEZpeCBzbWM5MTExMSBldGhlcm5ldCBkcml2ZXIgZm9yIFhhZW5pYXggYm9hcmQgKG5lZWQgdG8gaGFuZGxlCisgIHVuYWxpZ25lZCB0YWlsIHBhcnQgc3BlY2lhbGx5KS4KKworKiBVcGRhdGUgZm9yIEFUOTFSTTkyMDBESyBhbmQgQ01DX1BVMiBib2FyZHM6CisgIC0gRW5hYmxlIGJvb3RpbmcgZGlyZWN0bHkgZnJvbSBmbGFzaAorICAtIGZpeCBDTUNfUFUyIGZsYXNoIGRyaXZlcgorCisqIEZpeCBta2ltYWdlIHVzYWdlIG1lc3NhZ2UKKworKiBNYXAgU1JBTSBvbiBOQzY1MCBib2FyZAorCisqIFdvcmsgYXJvdW5kIGZvciBFdGhlcm5ldCBwcm9ibGVtcyBvbiBYYWVuaWF4IGJvYXJkCisKKyogUGF0Y2ggYnkgVHNpQ2h1bmcgTGlldywgMjMgU2VwIDIwMDQ6CisgIC0gYWRkIHN1cHBvcnQgZm9yIE1QQzgyMjAgQ1BVCisgIC0gQWRkIHN1cHBvcnQgZm9yIEFsYXNrYSBhbmQgWXVrb24gYm9hcmRzCisKKyogRml4IGNvbmZpZ3VyYXRpb24gZm9yIEVSSUMgYm9hcmQgKG5lZWRzIG1vcmUgcm9vbSkKKworKiBBZGp1c3QgTUlQUyBjb21waWxlciBvcHRpb25zIGF0IHJ1bi10aW1lIGRlcGVuZGluZyBvbiB0b29scyB2ZXJzaW9uCisgICgiLW1hcmNoPTRrYyAtbXR1bmU9NGtjIC1XYSwtbWlwc19hbGxvd19icmFuY2hfdG9fdW5kZWZpbmVkIiBmb3IgbmV3LAorICAiLW1jcHU9NGtjIiBmb3Igb2xkIHRvb2xzKQorCisqIEFkZCBwYXNzaW5nIG9mIHRoZSBjb21tYW5kIGxpbmUgYW5kIG1lbW9yeSBzaXplIGluZm9ybWF0aW9uIHRvICB0aGUKKyAga2VybmVsIG9uIHhhZW5pYXggYm9hcmQuCisKKyogRW5hYmxlIE5BTkQgZmxhc2ggc3VwcG9ydCBmb3IgTkM2NTAgYm9hcmQuCisKKyogUGF0Y2ggYnkgVGhvbWFzIExhbmdlIDA3IE9jdCAyMDA0OgorICBVcGRhdGVkIFJFQURNRSBmb3IgREJBdTF4MDAgYm9hcmRzIHRvIG1hdGNoIGN1cnJlbnQgc3RhdHVzCisKKyogUGF0Y2ggYnkgUGhpbGlwcGUgUm9iaW4sIDI4IFNlcHQgMjAwNDoKKyAgRml4IEZsYXNoIHN1cHBvcnQgZm9yIFZlcnNhdGlsZS4KKworKiBQYXRjaCBieSBSb2dlciBCbG9mZWxkLCAxNiBTZXAgMjAwNDoKKyAgRml4IHRpbWVvdXQgZm9yIERIQ1AgY29tbWFuZCByZXRyeQorCisqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNCBTZXAgMjAwNDoKKyAgRml4IGVhcmx5IHNlcmlhbCBoYW5nIHdoZW4gQ09ORklHX1NFUklBTF9NVUxUSSBpcyBkZWZpbmVkLgorCisqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNCBTZXAgMjAwNDoKKyAgS2ljayB3YXRjaGRvZyB3aGVuIGJ6LWRlY29tcHJlc3NpbmcKKworKiBGaXggQ0ZHX0haIHByb2JsZW1zIG9uIEFUOTFSTTkyMDAgc3lzdGVtcworICBbUmVtZW1iZXI6IENGR19IWiBzaG91bGQgYmUgMTAwMCBvbiBBTEwgc3lzdGVtcyFdCisKKyogUGF0Y2ggYnkgR3JpZGlzaCBTaGxvbWksIDMwIEF1ZyAyMDA0OgorICAtIEFkZCBzdXBwb3J0IHRvIHJldkEgdmVyc2lvbiBvZiBQUTI3IGFuZCBQUTI3RS4KKyAgLSBSZXZlcnRlZCBNUEM4MjYwQURTIGJhdWRyYXRlIGJhY2sgdG8gb3JpZ2luYWwgMTE1MjAwCisKKyogUGF0Y2ggYnkgSG9qaW4sIDE3IFNlcCAyMDA0OgorICBGaXggdHlwbyBpbiBjZmlfZmxhc2guYworCisqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDA5IFNlcHRlbWJlciAyMDA0OgorICBtdGVzdCdzIGRhdGEgbGluZSB0ZXN0ICh3aXRoIENGR19BTFRfTUVNVEVTVCBzZXQpIHJldHVybmVkIGEgd3JvbmcKKyAgZXJyb3IgbWVzc2FnZQorCisqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDMxIEF1Z3VzdCAyMDA0OgorICBBZGRlZCBvcHRpb24gQ0ZHX1hMQl9QSVBFTElOSU5HIHRvIGVuYWJsZSBYTEIgcGlwZWxpbmluZy4gVGhpcworICBpbXByb3ZlcyBGVFAgcGVyZm9ybWFuY2UgZm9yIE1QQzUyMDAgc3lzdGVtcy4gRW5hYmxlZCBmb3IgSWNlQ3ViZQorICBieSBkZWZhdWx0LgorCisqIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDMwIEF1ZyAyMDA0OgorICAtIEltcHJvdmUgcGxhdGZvcm0uUyBjb2RlIGZvciBvbWFwMTUxMGlubiB0aGF0IGRldGVjdHMgd2hldGhlciBjb2RlCisgICAgaXMgcnVubmluZyBmcm9tIFNEUkFNIG9yIG5vdC4gUGF0Y2ggYWxsb3dzIFNEUkFNIHRvIGJlIGNvbmZpZ3VyZWQKKyAgICBpZiBjb2RlIGlzIHJ1bm5pbmcgb3V0IG9mIFNSQU0gYXQgMHgyMDAwMDAwMC4KKworKiBQYXRjaCBieSBGcmVkZXJpY2sgS2xhdHQsIDMwIEF1ZyAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgdGhlIFdpbmQgUml2ZXIgU0JDODU0MC9TQkM4NTYwIGJvYXJkcworCisqIENvbmZpZ3VyZSBTWDEgYm9hcmQgdG8gdXNlIGRyaXZlcnMvY2ZpX2ZsYXNoLmMKKworKiBQYXRjaGVzIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDMwIEF1ZyAyMDA0OgorICAtIENvbmZpZ3VyZSBvbWFwMTUxMGlubiBib2FyZCB0byB1c2UgZHJpdmVycy9jZmlfZmxhc2guYworICAtIE1ha2UgZHJpdmVycy9jZmlfZmxhc2guYyBwcm90ZWN0IGVudmlyb25tZW50IGFuZCByZWR1bmRhbnQKKyAgICBlbnZpcm9ubWVudC4KKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyMyBKdW4gMjAwNDoKKyAgLSBBZGQgc2NyaXB0ICh0b29scy9pbWcyYnJlYy5zaCkgdG8gcHJvZ3JhbW0gVS1Cb290IGludG8KKyAgICAoU3luY2gpRmxhc2ggdXNpbmcgdGhlIEJvb3RzdHJhcCBNb2RlIG9mIHRoZSBNQzkzMjhNWDEvTAorCisqIFBhdGNoZXMgYnkgU2NvdHQgTWNOdXR0LCAyNCBBdWcgMjAwNDoKKyAgLSBBZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIE5pb3MtSUkgcHJvY2Vzc29ycy4KKyAgLSBBZGQgc3VwcG9ydCBmb3IgUHN5ZW50IFBDSS01NDQxIGJvYXJkLgorICAtIEFkZCBzdXBwb3J0IGZvciBQc3llbnQgUEsxQzIwIGJvYXJkLgorCisqIFBhdGNoZXMgYnkgSm9uIExvZWxpZ2VyLCAyNCBBdWcgMjAwNDoKKyAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIE1QQzg1NDEgYW5kIE1QQzg1NTUgQ0RTIGJvYXJkcworICAtIENsZWFudXAgZXRoP2FkZHIgaGFuZGxpbmc6IG1ha2UgZGVwZW5kZW50IG9uIENPTkZJR19FVEg/QUREUgorICAtIENvbnZlcnQgTVBDODV4eEFEUyB0byB1c2UgY29tbW9uIENGSSBmbGFzaCBkcml2ZXIKKyAgLSBGaXggUENJIHdpbmRvdyBvbiBNUEM4NXh4OyByZW1vdmUgdW5uZWVkZWQgUENJIGluaXRpYWxpemF0aW9uCisgICAgZnJvbSBib2FyZF9lYXJseV9pbml0X2YoKQorICAtIFByb3ZpZGUgU1cgd29ya2Fyb3VuZCBmb3IgUENJIGluaXRpYWxpemF0aW9uIG9uIDg1eHggQ0RTCisKKyogUGF0Y2hlcyBieSBHZW9yZ2UgRy4gRGF2aXMsIDI0IEF1ZyAyMDA0OgorICAtIEVuYWJsZSByYW1kaXNrL2luaXRyZCB0YWdnZWQgcGFyYW0gc3VwcG9ydCBmb3Igb21hcDE2MTBoMl9jb25maWcKKyAgLSBSZW1vdmUgc3RhdGljIG5ldHdvcmsgc2V0dXAgZGVmYXVsdHMgZnJvbSBteDFhZHNfY29uZmlnCisgIC0gdXBkYXRlIEFSTSBib2FyZHMgdG8gdXNlIGNvbnN0YW50cyBmcm9tIG1hY2gtdHlwZXMuaAorCisqIFBhdGNoIGJ5IEdhcnkgSmVubmVqb2huLCAwNCBPY3QgMjAwNDoKKyAgLSBmaXggSTJDIG9uIGF0OTFybTkyMDAKKyAgLSBhZGQgc3VwcG9ydCBmb3IgUmljb2ggUlM1QzM3MkEgUlRDCisKKyogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDAxIE9jdCAyMDA0OgorICAtIGFkZCBzdXBwb3J0IGZvciBDTUMgUFUyIGJvYXJkCisgIC0gYWRkIHN1cHBvcnQgZm9yIEkyQyBvbiBhdDkxcm05MjAwCisKKyogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDI4IFNlcCAyMDA0OgorICBmaXggYmF1ZHJhdGUgaGFuZGxpbmcgb24gYXQ5MXJtOTIwMAorCisqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIyIEF1ZyAyMDA0OgorICAtIHJlbW92ZSBaUEMuMTkwMCBib2FyZC1zcGVjaWZpYyBmbGFzaCBkcml2ZXI7CisgICAgc3dpdGNoIHRoZSBwb3J0IHRvIGdlbmVyaWMgQ0ZJIGRyaXZlcjsKKyAgLSBwb3J0IGNsZWFuLXVwCisKKyogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMjEgQXVnIDIwMDQ6CisgIEFkZCBjYWxjX2Zic2l6ZSgpIGZ1bmN0aW9uIHVzZWQgd2l0aCBWSURFT0xGQl9UQUcgb24gVFJBQgorCisqIENsZWFuIHVwIHRvb2xzL2JtcF9sb2dvLmMgdG8gbm90IGFkZCB0cmFpbGluZyB3aGl0ZSBzcGFjZQorCisqIFBhdGNoIGJ5IEhpbmtvIEtvY2V2YXIsIDIxIEF1ZyAyMDA0OgorICAtIEdyb3VwIGNvbW1vbiBmcmFtZWJ1ZmZlciBmdW5jdGlvbnMgaW4gY29tbW9uL2xjZC5jCisgIC0gR3JvdXAgY29tbW9uIGZyYW1lYnVmZmVyIG1hY3JvcyBhbmQgI2RlZmluZXMgaW4gaW5jbHVkZS9sY2QuaAorICAtIFByb3ZpZGUgY2FsY19mYnNpemUoKSBmb3IgdmlkZW8gQVRBRworCisqIFBhdGNoIGJ5IFNhbSBTb25nLCAyMSBBdWd1c3QgMjAwNDoKKyAgLSBGaXggYSB0eXBvIGluIFJFQURNRQorICAtIEFsaWduICIoUk8pIiBvdXRwdXQgZm9yICJmbGluZm8iIGFmdGVyICJwcm90ZWN0IG9uIgorICAtIEFkZCBSRVNFVCBzdXBwb3J0IGZvciBSUFhsaXRlX0RXIGJvYXJkOyBhZGp1c3QgQ1BVOkJVUyBmcmVxdWVuY3kKKyAgICByYXRpbyAxOjEgd2hlbiBjb3JlIGZyZXF1ZW5jeSBsZXNzIHRoYW4gNTBNSHoKKworKiBQYXRjaGVzIGJ5IEhpbmtvIEtvY2V2YXIsIDIxIEF1ZyAyMDA0OgorICAtIGZpeCBzb21lICJ1c2Ugb2YgbGFiZWwgYXQgZW5kIG9mIGNvbXBvdW5kIHN0YXRlbWVudCIgd2FybmluZ3MKKyAgLSBEZWZpbmUgdHlwZSBvZiBMQ0QgcGFuZWwgb24gbHViYm9jayBib2FyZCBpZiBDT05GSUdfTENEIGlzIHVzZWQKKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAxNiBBdWcgMjAwNDoKKyAgLSBJbnRyb2R1Y2luZyB0aGUgY29uY2VwdCBvZiBTb0NzICIuL2NwdS8kKENQVSkvJChTT0MpIgorICAtIGNyZWF0aW5nIHN1YmRpcnMgZm9yIFNvQ3MgLi9jcHUvYXJtOTIwdC9pbXggYW5kIC4vY3B1L2FybTkyMHQvczNjMjR4MAorICAtIG1vdmluZyBTb0Mgc3BlY2lmaWMgY29kZSBvdXQgb2YgY3B1L2FybTkyMHQvIGludG8gY3B1L2FybTkyMHQvJChTT0MpLworICAtIG1vdmluZyBkcml2ZXJzL3MzYzI0eDBfaTJjLmMgYW5kIGRyaXZlcnMvc2VyaWFsX2lteC5jIG91dCBvZiBkcml2ZXJzLworICAgIGludG8gY3B1L2FybTkyMHQvJChTT0MpLworCisqIFBhdGNoZXMgYnkgU2VhbiBDaGFuZywgMDkgQXVnIDIwMDQ6CisgIC0gQWRkZWQgc3VwcG9ydCBmb3IgYm90aCA4IGFuZCAxNiBiaXQgbW9kZSBhY2Nlc3MgdG8gU3lzdGVtIEFDRSBDRgorICAgIHRocm91Z2ggTVBVLgorICAtIEZpeGVkIG1pc3NpbmcgU3lzdGVtIEFDRSBDRiBkZXZpY2UgZHVyaW5nIGdldCBGQVQgcGFydGl0aW9uIGluZm8KKyAgICBpbiBmYXRfcmVnaXN0ZXJfZGV2aWNlIGZ1bmN0aW9uLgorICAtIEVuYWJsZWQgU3lzdGVtIEFDRSBDRiBzdXBwb3J0IG9uIE1MMzAwLgorCisqIFBhdGNoIGJ5IFNlYW4gQ2hhbmcsIDA5IEF1ZyAyMDA0OgorICBTeW5jaCBkZWZpbmVzIGZvciBzYXZlZW52IGFuZCBkb19zYXZlZW52IGZ1bmN0aW9ucyBzbyB0aGV5IGdldAorICBjb21waWxlZCB1bmRlciB0aGUgc2FtZSBzdGF0ZW1lbnQuCisKKyogUGF0Y2ggYnkgU2VhbiBDaGFuZywgMDkgQXVnIDIwMDQ6CisgIC0gQWRkZWQgSTJDIHN1cHBvcnQgZm9yIE1MMzAwLgorICAtIEFkZGVkIHN1cHBvcnQgZm9yIE1MMzAwIHRvIHJlYWQgb3V0IGl0cyBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbgorICAgIHN0b3JlZCBvbiB0aGUgRUVQUk9NLgorICAtIEFkZGVkIHN1cHBvcnQgdG8gdXNlIGJvYXJkIHNwZWNpZmljIHBhcmFtZXRlcnMgYXMgcGFydCBvZgorICAgIFUtQm9vdCdzIGVudmlyb25tZW50IGluZm9ybWF0aW9uLgorICAtIFVwZGF0ZWQgTUxEIGZpbGVzIHRvIHN1cHBvcnQgY29uZmlndXJhdGlvbiBmb3IgbmV3IGZlYXR1cmVzCisgICAgYWJvdmUuCisKKyogUGF0Y2hlcyBieSBUcmF2aXMgU2F3eWVyLCAwNSBBdWcgMjAwNDoKKyAgLSBSZW1vdmUgaW5jb3JyZWN0IGJyaWRnZSBzZXR0aW5ncyBmb3IgZXRoIGdyb3VwIDYKKyAgLSBBZGQgY2FsbCB0byBzZXR1cCBicmlkZ2UgaW4gcHBjXzQ0MHhfZXRoX2luaXRpYWxpemUKKyAgLSBGaXggcHBjXzQ0MHhfZXRoX2luaXQgdG8gcmVzZXQgdGhlIHBoeSBvbmx5IGlmIGl0cyB0aGUKKyAgICBmaXJzdCB0aW1lIHRocm91Z2gsIG90aGVyd2lzZSwganVzdCBjaGVjayB0aGUgcGh5IGZvciB0aGUKKyAgICBhdXRvbmVnb3RpYXRlZCBzcGVlZC9kdXBsZXguICBUaGlzIGFsbG93cyB0aGUgdXNlIG9mIG5ldGNvbnNvbGUKKyAgLSBvbmx5IHByaW50IHRoZSBzcGVlZC9kdXBsZXggdGhlIGZpcnN0IHRpbWUgdGhlIHBoeSBpcyByZXNldC4KKworKiBQYXRjaCBieSBTaGxvbW8gS3V0LCAyOSBNYXIgMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIE1LUyBJbnN0cnVtZW50cyAiUXVhbnR1bSIgYm9hcmQKKworKiBGaXggYnVpbGQgcHJvYmxlbSB3aXRoIENvZ2VudCBib2FyZHM7CisgIGF2b2lkIHVzaW5nIDxhc20vYnl0ZW9yZGVyLmg+IHdoZW4gdXNpbmcgdGhlIGhvc3QgY29tcGlsZXIKKworKiBQYXRjaCBieSBHYW5hcGF0aGkgQywgMDQgQXVnIDIwMDQ6CisgIEZpeCBORlMgdGltZW91dCBpc3N1ZQorCisqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE5IEp1bCAyMDA0OgorICAtIEZpeCBob3N0IHRvb2xzIGJ1aWxkaW5nIGluIEN5Z3dpbiBlbnZpcm9ubWVudAorICAtIEZpeCBoZWFkZXIgZmlsZXMgc2VhcmNoIG9yZGVyIGZvciBob3N0IHRvb2xzCisKKyogUGF0Y2ggYnkgVG9tIEFybWlzdGVhZCwgMTkgSnVsIDIwMDQ6CisgIEZpeCBrZ2RiLlMgc3VwcG9ydCBmb3IgNzR4eF83NXggY3B1CisKKyogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxNSBKdWwgMjAwNDoKKyAgRml4IE1QQzg1eHggSTJDIGRyaXZlcgorCisqIEZpeCBwcm9ibGVtcyB3aXRoIENEUk9NIGRyaXZlIGFzIHNsYXZlIGRldmljZSBvbiBMaXRlNTIwMCBJREUgYnVzLgorCisqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDE1IEp1bHkgMjAwNAorICBTZXQgdGhlIFBDSSBjbGFzcyBjb2RlIGZvciBKU0UgYm9hcmQgYXMgcGFydCBvZiBQQ0kgaW50ZXJmYWNlIHNldHVwCisKKyogUGF0Y2ggYnkgTWljaGFlbCBCZW5kemljaywgMTUgSnVsIDIwMDQ6CisgIEZpeCBwcm9ibGVtIHdpdGggd3JpdGVzIHdpdGggb2RkIHNpemVzIGluIGRyaXZlcnMvY2ZpX2ZsYXNoLmMgd2hlbgorICBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURSBpcyBzZXQKKworKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxMyBKdWwgMjAwNDoKKyAgQWxsb3cgY2xvY2sgc2V0dGluZyBvbiBNUEM4NjYvTVBDODg1IHNlcmllcyBjaGlwcyBhY2NvcmRpbmcgdG8KKyAgZW52aXJvbm1lbnQgdmFyaWFibGUgYGNwdWNsaycKKworKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMCBBcHIgMjAwNDoKKyAgUmVtb3ZlIHVubmVjZXNzYXJ5IHJlZGVmaW5lIG9mIENQTV9EQVRBT05MWV9TSVpFIGZvciBNUEM4MjZ4CisKKyogUGF0Y2ggYnkgVmluY2VudCBEdWJleSwgMjQgU2VwIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciB4YWVuaWF4IGJvYXJkCisKKyogQWRkIGNvbW1lbnQgYWJvdXQgbm9uLUdQTCBjaGFyYWN0ZXIgb2Ygc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMgdG8KKyAgQ09QWUlORyBmaWxlCisKKyogRml4IEZFQyBldGhlcm5ldCBwcm9ibGVtIG9uIE5TQ1UgYm9hcmQuCisKKyogUGF0Y2ggYnkgR2FyeSBKZW5uZWpvaG4sIDA5IFNlcCAyMDA0OgorICBhbGxvdyB0byB1c2UgVVNBUlQxIGFzIGNvbnNvbGUgcG9ydCBvbiBhdDkxcm05MjAwZGsgYm9hcmRzCisKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNiBTZXAgMjAwNDoKKyAgVXBkYXRlIEFSNDA1IGJvYXJkLgorCisqIEZpeCBTeXNDbGsgaGFuZGxpbmcgZm9yIFBQQ2hhbWVsZW9uIGFuZCBDQVRjZW50ZXIgYm9hcmRzCisKKyogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMDggU2VwIDIwMDQ6CisgIFVwZGF0ZSBldGFncyBidWlsZCB0YXJnZXQKKworKiBJbXByb3ZlIE5ldENvbnNvbGUgc3VwcG9ydDogYWRkIHN1cHBvcnQgZm9yIGJyb2FkY2FzdCBkZXN0aW5hdGlvbgorICBhZGRyZXNzIGFuZCBidWZmZXJlZCBpbnB1dC4KKworKiBDbGVhbnVwIGNvbXBpbGVyIHdhcm5pbmdzIGZvciBHQ0MgMy4zLnggYW5kIGxhdGVyCisKKyogRml4IHByb2JsZW0gaW4gY21kX2pmZnMyLmMgaW50cm9kdWNlZCBieSBDRkdfSkZGU19TSU5HTEVfUEFSVCBwYXRjaAorCisqIEFkZCBzdXBwb3J0IGZvciBJRFMgIk5DNjUwIiBib2FyZAorCisqIEFkZCBhdXRvbWF0aWMgdXBkYXRlIHN1cHBvcnQgZm9yIExXTU9OIGJvYXJkCisKKyogQ2xlYXIgQmxvY2sgTG9jay1CaXRzIHdoZW4gZXJhc2luZyBmbGFzaCBvbiBMV01PTiBib2FyZC4KKworKiBGaXggcmV0dXJuIGNvZGUgb2YgImZhdGxvYWQiIGNvbW1hbmQKKworKiBFbmFibGUgTVNET1MvVkZBVCBmaWxlc3lzdGVtIHN1cHBvcnQgZm9yIExXTU9OIGJvYXJkCisKKyogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDMgQXVnIDIwMDQ6CisgIGNoYW5nZSB0aW1pbmcgZm9yIFNNNTAxIGdyYXBoaWNzIGNvbnRyb2xsZXIgb24gVFFNNTIwMCBtb2R1bGUKKworKiBQYXRjaCBieSBNYXJrIEpvbmFzLCAxMyBKdWx5IDIwMDQ6CisgIC0gVG90YWw1MjAwIExDRCBub3cgcnVuIGluIGxpdHRsZSBlbmRpYW4gbW9kZS4gRW5kaWFuZXNzIGNvbnZlcnNpb24KKyAgICBpcyBkb25lIGluIGhhcmR3YXJlLgorICAtIFJlbW92ZWQgbGFzdCByZWZlcmVuY2UgdG8gImNvbnNvbGUiIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisqIFBhdGNoZXMgYnkgTGFycyBNdW5jaCwgMTIgSnVsIDIwMDQ6CisgIC0gbW92ZSBhdDQ1LmMgdG8gYm9hcmQvYXQ5MXJtOTIwMGRrLyBzaW5jZSB0aGlzIGlzIGF0OTFybTkyMDBkaworICAgIGJvYXJkIHNwZWNpZmljCisgIC0gc3BsaXQgb3V0IHRoZSBMWFQ5NzFBIFBIWSBmcm9tIG5zXzk3NTBfZXRoLmgKKyAgLSBzcGxpdCB0aGUgZG05MTYxIHBoeSBwYXJ0IG91dCBvZiBhdDkxcm05MjAwX2V0aGVyLmMKKworKiBQYXRjaCBieSBBbmRyZWFzIEVuZ2VsLCAxMiBKdWwgMjAwNDoKKyAgUmVwbGFjZWQgaGFyZGNvZGVkIFBMMDExIGNsb2NrIGZyZXF1ZW5jeSB3aXRoIGNvbmZpZyB2YXJpYWJsZS4KKyAgRml4ZWQgd3JvbmcgQ09ORklHX0NNRF9ERkwgZG9jLgorCisqIFBhdGNoIGJ5IFRob21hcyBWaWVod2VnZXIsIDA5IEp1biAyMDA0OgorICBtYWtlIGl0IHBvc3NpYmxlIHRvIHJlbW92ZSBjaHBhcnQgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBwYXJ0aXRpb24KKworKiBBZGQgc3VwcG9ydCBmb3IgY29uc29sZSBvdmVyIFVEUCAoY29tcGF0aWJsZSB0byBJbmdvIE1vbG5hcidzCisgIG5ldGNvbnNvbGUgcGF0Y2ggdW5kZXIgTGludXgpCisKKyogUGF0Y2ggYnkgSm9uIExvZWxpZ2VyLCAxNiBKdWwgMjAwNDoKKyAgLSBzdXBwb3J0IGxhcmdlciBERFIgbWVtb3JpZXMgdXAgdG8gMkcgb24gdGhlIFBDODU0MC84NTYwQURTIGFuZAorICAgIFNUWEdQMyBib2FyZHMKKyAgLSBNYWRlIE1QQzg1NDAvODU2MEFEUyBiZSAzM01oeiBQQ0kgYnkgZGVmYXVsdC4KKyAgLSBSZW1vdmVkIG1vbGR5IENPTkZJR19SQU1fQVNfRkxBU0gsIENGR19GTEFTSF9QT1JUX1dJRFRIXzE2CisgICAgYW5kIENPTkZJR19MMl9JTklUX1JBTSBvcHRpb25zLgorICAtIFJlZmFjdG9yIExvY2FsIEJ1cyBpbml0aWFsaXphdGlvbiBvdXQgb2YgU0RSQU0gc2V0dXAuCisgIC0gUmUtaW1wbGVtZW50IG5ldyB2ZXJzaW9uIG9mIExCQzExL0REUjExIGVycmF0YSB3b3JrYXJvdW5kcy4KKyAgLSBNb3ZlZCBib2FyZCBzcGVjaWZpYyBQQ0kgaW5pdCBwYXJ0cyBvdXQgb2YgQ1BVIGRpcmVjdG9yeS4KKyAgLSBBZGRlZCBUTEIgZW50cnkgZm9yIFBDSS0xIElPIE1lbW9yeQorICAtIFVwZGF0ZWQgUkVBRE1FLm1wYzg1eHhhZHMKKworKiBQYXRjaCBieSBTYXNjaGEgSGF1ZXIsIDI4IEp1bjoKKyAgLSBhZGQgZ2VuZXJpYyBzdXBwb3J0IGZvciBNb3Rvcm9sYSBpLk1YIGFyY2hpdGVjdHVyZQorICAtIGFkZCBzdXBwb3J0IGZvciBteDFhZHMsIG14MWZzMiBhbmQgc2NiOTMyOCBib2FyZHMKKworKiBQYXRjaGVzIGJ5IE1hcmMgTGVlbWFuLCAyMyBKdWwgMjAwNDoKKyAgLSBBZGQgZGVmaW5lIGZvciB0aGUgUENJL01lbW9yeSBCdWZmZXIgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorICAtIGNvcnJlY3RlZCBjb21tZW50cyBpbiBjcHUvbXBjODI0eC9jcHVfaW5pdC5jCisKKyogQWRkIHN1cHBvcnQgZm9yIG11bHRpcGxlIHNlcmlhbCBpbnRlcmZhY2VzCisgIChmb3IgZXhhbXBsZSB0byBhbGxvdyBtb2RlbSBkaWFsLWluIC8gZGlhbC1vdXQpCisKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNSBKdWwgMjAwNDoKKyAgY3B1L3BwYzR4eC9zZHJhbS5jIHJld3JpdHRlbiBub3cgdXNpbmcgZ2V0X3JhbV9zaXplKCkKKworKiBGaXggTlNDVSBjb25maWc7IGFkZCBldGhlcm5ldCB3YWtldXAgY29kZS4KKworKiBBZGQgbGluayBmb3IgcHJlbG9hZGVyIGZvciBNb3Rvcm9sYSBDb2xkRmlyZSB0byBSRUFETUUubTY4aworCisqIFBhdGNoIGJ5IE1pY2hhZWwgQmVuZHppY2ssIDEyIEp1bCAyMDA0OgorICBmaXggb3V0cHV0IGZvcm1hdHRpbmcgaW4gZHJpdmVycy9jZmlfZmxhc2guYworCisqIFBhdGNoIGJ5IE1hcmsgSm9uYXMsIDAyIEp1bCAyMDA0OgorICBGaXggbG93Ym9vdCAoYWdhaW4pIG9uIE1QQzV4eHgKKworKiBQYXRjaCBieSBDdXJ0IEJydW5lLCAwNyBKdWwgMjAwNDoKKyAgcmVsb2NhdGUgZXhjZXB0aW9uIHZlY3RvcnMgb24gYXJtNzIwdCBpZiBuZWVkZWQKKworKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDA2IEp1bCAyMDA0OgorICAtIHVwZGF0ZSBtYWNoLXR5cGVzLmggdG8gbGF0ZXN0IGFybS5saW51eC5vcmcudWsgbWFzdGVyIGxpc3QKKyAgLSBTZXQgY29ycmVjdCBPTUFQMTYxMCBiaV9hcmNoX251bWJlciBmb3IgYnVpbGQgdGFyZ2V0CisKKyogUGF0Y2ggYnkgQ3VydCBCcnVuZSwgMDYgSnVsIDIwMDQ6CisgIGV2YjQ1MTA6IGFkZCBzdXBwb3J0IGZvciB0aW1lciBpbnRlcnJ1cHQ7IGNsZWFudXAKKworKiBQYXRjaCBieSBEYW4gUG9pcm90LCAwNiBKdWwgMjAwNDoKKyAgRml4IHNiYzgyNjAgZW52aXJvbm1lbnQgdmFyaWFibGVzCisKKyogQ2xlYW51cCByZWR1bmRhbmQgImNvbnNvbGUiIGVudmlyb25tZW50IHZhcmlhYmxlCisKKyogUGF0Y2ggYnkgTWFyayBKb25hcywgMDUgSnVsIDIwMDQ6CisgIGFkZCBzdXBwb3J0IGZvciB0aGUgVG90YWw1MTAwJ3MgYW5kIFRvdGFsNTIwMCdzIExDRCBzY3JlZW4KKworKiBQYXRjaGVzIGJ5IERhbiBFaXNlbmh1dCwgMDEgSnVsIDIwMDQ6CisgIC0gUkVBRE1FIGZpeGVzLgorICAtIE1vdmUgZG9jMjAwMC5oIGluY2x1ZGUgdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5nIG9uIHNvbWUgYm9hcmRzCisKKyogUGF0Y2ggYnkgTWFyayBKb25hcywgMDEgSnVsIDIwMDQ6CisgIEFkZGVkIHN1cHBvcnQgZm9yIFRvdGFsNTEwMCBhbmQgVG90YWw1MjAwIChSZXYuMSBhbmQgUmV2LjIpCisgIE1HVDUxMDAgYW5kIE1QQzUyMDAgYmFzZWQgRnJlZXNjYWxlIHBsYXRmb3Jtcy4KKworKiBQYXRjaCBieSBQaGlsaXBwZSBSb2JpbiwgMDEgSnVsIDIwMDQ6CisgIEFkZCBpbml0aWFsaXphdGlvbiBmb3IgSW50ZWdyYXRvciBhbmQgdmVyc2F0aWxlIGJvYXJkIGZpbGVzLgorCisqIFBhdGNoIGJ5IEhpbmtvIEtvY2V2YXIsIDAxIEp1biAyMDA0OgorICBGaXggVkZEIEZCIGFsbG9jYXRpb24sIGFkZCBMQ0QgRkIgYWxsb2NhdGlvbiBvbiBBUk0KKworKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAzMCBKdW4gMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIFRRTTUyMDAgYm9hcmQKKworKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyOSBKdW4gMjAwNDoKKyAgQWRkIGxvb3B3IGNvbW1hbmQ6IGluZmluaXRlIHdyaXRlIGxvb3Agb24gYWRkcmVzcyByYW5nZQorCisqIFBhdGNoZXMgYnkgWWFzdXNoaSBTaG9qaSwgMjkgSnVuIDIwMDQ6CisgIC0gYWRkIGVtcHR5IGluY2x1ZGUvYXNtLW1pY3JvYmxhemUvcHJvY2Vzc29yLmgKKyAgLSBhZGQgdG8gQ1JFRElUUyBhbmQgTUFJTlRBSU5FUlMKKyAgLSBhZGQgZ2QgaW5pdGlhbGl6YXRpb24KKyAgLSBhZGQgTWljcm9CbGF6ZSBhbmQgU1VaQUtVIGJvYXJkIHRvIE1BS0VBTEwgc2NyaXB0CisgIC0gYWRkIHJlc2V0IHN1cHBvcnQgZm9yIFNVWkFLVQorICAtIGFkZCBmbHVzaF9jYWNoZSgpIGZvciBNaWNyb0JsYXplCisgIC0gYWRkIENGR19GTEFTSF9TSVpFIHRvIGluY2x1ZGUvY29uZmlncy9zdXpha3UuaCBzaW5jZSB3ZSBoYXZlIGZpeGVkCisgICAgc2l6ZSBmbGFzaCBtZW1vcnkgb24gU1VaQUtVCisKKyogUGF0Y2ggYnkgUHJha2FzaCBLdW1hciwgMjcgSnVuIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciB0aGUgUFhBMjUwIGJhc2VkIEludHJpbnN5YyBDZXJmIGJvYXJkLgorCisqIFBhdGNoIGJ5IFlhc3VzaGkgU2hvamksIDI3IEp1biAyMDA0OgorICBmaXggY29tbWVudCBpbiBpbmNsdWRlL2NvbW1vbi5oCisKKyogUmVuYW1lIFNCQzg1NjAgaW50byBzYmM4NTYwIGZvciBjb25zaXN0ZW5jeQorCisqIFBhdGNoIGJ5IERhbmllbCBQb2lyb3QsIDI0IEp1biAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgV2luZCBSaXZlcidzIHNiYzgyNDAgYm9hcmQKKworKiBQYXRjaGVzIGJ5IFlhc3VzaGkgU2hvamksIDI2IEp1biAyMDA0OgorICAtIGRyaXZlcnMvc2VyaWFsX3h1YXJ0bGl0ZS5jOiBmaXggInJldHVybiAwIiBpbiB2b2lkIGZ1bmN0aW9uCisgIC0gYWRkIG1pY3JvYmxhemUgc3VwcG9ydCB0byBta2ltYWdlIHRvb2wKKworKiBQYXRjaCBieSBGcmVkIEtsYXR0LCAyNSBKdW4gMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIFdpbmRSaXZlcidzIHNiYzg1NjAgYm9hcmQKKworKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5pZXJlLCAyNCBKdW4gMjAwNAorICBTbWFsbCBCdWdzIGZpeGVzIGZvciAiYXQ5MXJtOTIwMGRrIiBib2FyZDoKKyAgLSBUaW1pbmcgbW9kaWZpY2F0aW9ucyBmb3IgU1BJIERhdGFGbGFzaCBhY2Nlc3MKKyAgLSBGaXggTkFORCBmbGFzaCBkZXRlY3Rpb24gYnVnCisKKyogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaWVyZSwgMjQgSnVuIDIwMDQ6CisgIEFkZCBTdXBwb3J0IGZvciBGbGFzaCBBVDQ5QlY2NDE2IGZvciBBVDkxUk05MjAwREsgYm9hcmQKKworKiBQYXRjaCBieSBKb24gTG9lbGlnZXIsIDE3IEp1bmUgMjAwNDoKKyAgQ29tcGxldGlvbiBvZiB0aGUgODU0MEFEUy84NTYwQURTIHVwZGF0ZXM6CisgIEZpeCBzb21lIFBDSSBhbmQgUmFwaWQgSS9PIG1lbW9yeSBtYXBzLAorICBJbml0aWFsaXplIGJvdGggVFNFQyAxIGFuZCAyLAorICBJbml0aWFsaXplIFNEUkFNCisgIFVwZGF0ZSBNQUlOVEFJTkVSIGZvciA4NXh4IGJvYXJkcyBhbmQgUkVBRE1FLm1wYzg1eHhhZHMKKworKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNiBKdW4gMjAwNDoKKyAgUmVtb3ZlIG9ic29sZXRlIEFkZGVySUkgcG9ydCB3aGljaCB3YXMgc3VwZXJzZWRlZCBieSB1bmlmaWVkCisgIEFkZGVySUkvQWRkZXI4N3ggcG9ydAorCisqIFBhdGNoIGJ5IExhZGlzbGF2IE1pY2hsLCAxNiBKdW4gMjAwNDoKKyAgRml4IGdjYy0zLjMuMyB3YXJuaW5ncyBmb3Igc21jOTExMTEuYworCisqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDIgSnVsIDIwMDQ6CisgIC0gRml4IGJ1ZyBpbiA0MDUgZXRoZXJuZXQgZHJpdmVyOyBhbGxvY2F0ZWQgZGF0YSBub3QgY2xlYXJlZCEKKyAgLSBGaXggcHJvYmxlbSBpbiA0MDUgaTJjIGRyaXZlcjsgZG9uJ3QgdHJ5IHRvIHByaW50IHdpdGhvdXQgY29uc29sZSEKKworKiBQYXRjaCBieSBQYXVsIFJ1aGxhbmQsIDExIEp1biAyMDA0OgorICBSZW1vdmUgZGVidWcgY29kZSBmcm9tICdib2FyZC9scGQ3YTQweC9mbGFzaC5jJworCisqIFBhdGNoIGJ5IEFuZHJlYSBNYXJzb24sIDExIEp1biAyMDA0OgorICBVcGRhdGUgZm9yIFBQQ2hhbWVsZW9uIGJvYXJkOgorICAtIHN1cHBvcnQgZm9yIFN5c0NsayBAIDI1TUh6CisgIC0gc3VwcG9ydCBmb3IgU2lsaWNvbiBNb3Rpb24gU003MTIgVkdBIGNvbnRyb2xsZXIKKyAgLSBzb21lIGNsZWFuIHVwcworCisqIFBhdGNoZXMgYnkgUmljaGFyZCBXb29kcnVmZiwgMTAgSnVuIDIwMDQ6CisgIC0gZml4IHByb2JsZW1zIHdpdGggZXhhbXBsZXMvc3R1YnMuYyBmb3IgR0NDID49IDMuNAorICAtIGZpeCBwcm9ibGVtcyB3aXRoIGdkIGluaXRpYWxpemF0aW9uCisKKyogUGF0Y2ggYnkgQ3VydCBCcnVuZSwgMTcgTWF5IDIwMDQ6CisgIC0gQWRkIHN1cHBvcnQgZm9yIFNhbXN1bmcgUzNDNDUxMEIgQ1BVIChBUk03dGRtaSBiYXNlZCBTb0MpCisgIC0gQWRkIHN1cHBvcnQgZm9yIEVTUEQtSW5jLiBFVkI0NTEwIEJvYXJkCisKKyogUGF0Y2ggYnkgTWFyYyBMZWVtYW4sIDExIE1heSAyMDA0OgorICBGaXggZm9yIE1QQzgyNDUgLSByZWFkaW5nIFBQQyBNZW1vcnkgZnJvbSBhbm90aGVyIGRldmljZSB3aXRoIHRoZQorICBQUEMgYXMgUENJIHRhcmdldCBkZXZpY2UgY29ycnVwdHMgZGF0YSBkdWUgdG8gaW50ZXJlbmFsIGhhcmR3YXJlCisgIGJ1ZmZlcmluZy4KKworKiBGaXggImNscyIgY29tbWFuZCB3aGVuIHVzZWQgd2l0aCBzcGxhc2ggc2NyZWVuCisKKyogSW5jcmVhc2UgTkZTIGRvd25sb2FkIHRpbWVvdXQgKG5vdyAxIG1pbiAtIDEwIHNlYyBpcyB0byBzaG9ydCBmb3IgYQorICBzbG93IGRvd25sb2FkIG9mIGEgYmlnIGltYWdlKQorCisqIEFkZCAiY2xzIiBmdW5jdGlvbiB0byBNUEM4MjMgTENEIGRyaXZlciBzbyB3ZSBjYW4gcmVpbml0aWFsaXplIHRoZQorICBkaXNwbGF5IGV2ZW4gYWZ0ZXIgc2hvd2luZyBhIGJpdG1hcAorCisqIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMDQgSnVuIDIwMDQ6CisgIC0gRERSIFJhbSBzdXBwb3J0IGZvciBQTTUyMCAoTVBDNTIwMCkKKyAgLSBzdXBwb3J0IGZvciBkaWZmZXJlbnQgZmxhc2ggdHlwZXMgKFBNNTIwKQorICAtIFVTQiAvIElERSAvIENGLUNhcmQgLyBEaXNrT25DaGlwIHN1cHBvcnQgZm9yIFBNNTIwCisgIC0gOCBiaXQgYm9vdCByb20gc3VwcG9ydCBmb3IgUE01MjAvQ0U1MjAKKyAgLSBBZGQgYXV0byBTRFJBTSBtb2R1bGUgZGV0ZWN0aW9uIGZvciBNaWNyb1N5cyBDUEM0NSBib2FyZCAoTVBDODI0NSkKKyAgLSBJMkMgYW5kIFJUQyBzdXBwb3J0IGZvciBDUEM0NQorICAtIHN1cHBvcnQgb2YgbmV3IGZsYXNoIHR5cGUgKDI4RjE2MEMzVCkgZm9yIENQQzQ1CisKKyogRml4IGZsYXNoIHBhcmFtZXRlcnMgcGFzc2VkIHRvIExpbnV4IGZvciBQUENoYW1lbGVvbiBib2FyZAorCisqIFJlbW92ZSBldGhfaW5pdCgpIGZyb20gbGliX2FybS9ib2FyZC5jOyBpdCdzIGRvbmUgaW4gbmV0Lm5ldC5jLgorCisqIFBhdGNoIGJ5IFBhdWwgUnVobGFuZCwgMTAgSnVuIDIwMDQ6CisgIGZpeCBzdXBwb3J0IGZvciBMb2dpYyBTREstTEg3QTQwNCBib2FyZCBhbmQgY2xlYW4gdXAgdGhlCisgIExIN0E0MDQgcmVnaXN0ZXIgbWFjcm9zLgorCisqIFBhdGNoIGJ5IE1hdHRoZXcgTWNDbGludG9jaywgMTAgSnVuIDIwMDQ6CisgIE1vZGlmeSBjb2RlIHRvIHNlbGVjdCBjb3JyZWN0IHNlcmlhbCBjbG9jayBvbiBTYW5kcG9pbnQ4MjQ1CisKKyogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxMCBKdW4gMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIEludGVsIEszIHN0cmF0YSBmbGFzaC4KKworKiBQYXRjaCBieSBUaG9tYXMgQnJhbmQsIDEwIEp1biAyMDA0OgorICBGaXggImxvYWRzIiBjb21tYW5kIG9uIERLMVMxMCBib2FyZAorCisqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA5IEp1biAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgOE1CIGZsYXNoIFNJTU0gYW5kIEpGRlMyIGZpbGUgc3lzdGVtIG9uCisgIE1vdG9yb2xhIEZBRFMgYm9hcmQgYW5kIGl0cyBkZXJpdmF0aXZlcyAoTVBDODZ4QURTLCBNUEM4ODVBRFMpLgorCisqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDA5IEp1biAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgQW5hbG9ndWUmTWljcm8gQWRkZXI4N3ggYW5kIHRoZSBvbGRlciBBZGRlcklJIGJvYXJkLgorCisqIFBhdGNoIGJ5IE1pbmctTGVuIFd1LCAwOSBKdW4gMjAwNDoKKyAgQWRkIHN1cHBwb3J0IGZvciBNQzkzMjggKERhcmdvbmJhbGwpIENQVSBhbmQgTW90b3JvbGEgTVgxQURTIGJvYXJkCisKKyogUGF0Y2ggYnkgU2FtIFNvbmcsIDA5IEp1biAyMDA0OgorICAtIEFkZCBzdXBwb3J0IGZvciBSUFhsaXRlX0RXIGJvYXJkCisgIC0gVXBkYXRlIEZMQVNIIGRyaXZlciBmb3IgNCpBTTI5REwzMjNEQjkwVkkKKyAgLSBBZGQgb3B0aW9uIGNvbmZpZ3VyYXRpb24gb2YgQ0ZHX0VOVl9JU19JTl9OVlJBTSBvbiBSUFhsaXRlX0RXIGJvYXJkCisKKyogUGF0Y2ggYnkgTWFyayBKb25hcywgMDggSnVuZSAyMDA0OgorICAtIE1ha2UgTVBDNTIwMCBib2FyZHMgZXZhbHVhdGUgdGhlIFNWUiB0byBwcmludCBwcm9jZXNzb3IgbmFtZSBhbmQKKyAgICB2ZXJzaW9uIGluIGNoZWNrY3B1KCkgKGNwdS9tcGM1eHh4L2NwdS5jKS4KKworKiBQYXRjaCBieSBLYWktVXdlIEJsb2VtLCAwNiBNYXkgMjAwNDoKKyAgRml4IGVuZGlhbmVzcyBwcm9ibGVtIGluIGNyYW1mcyBjb2RlCisKKyogUGF0Y2ggYnkgVG9tIEFybWlzdGVhZCwgMDQgSnVuIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBNQVg2OTAwIFJUQworCisqIFBhdGNoZXMgYnkgTGFkaXNsYXYgTWljaGwsIDAzIEp1biAyMDA0OgorICAtIGZpeCBjZmlfZmxhc2guYyBvbiBMRSBzeXN0ZW1zCisgIC0gbGV0ICdtYWtlIG1ycHJvcGVyJyBkZWxldGUgdS1ib290LmltZyBhcyB3ZWxsCisgIC0gdHVybiBwcmludGYgaW50byBkZWJ1ZyBpbiBjZmlfZmxhc2guYworCisqIFBhdGNoIGJ5IEt1cnQgU3RyZW1lcmNoLCAyOCBNYXkgMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIEV4eXMgWFNFbmdpbmUgYm9hcmQKKworKiBQYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAyNyBNYXkgMjAwNDoKKyAgRml4IGEgTVBDNXh4eCBJMkMgdGltaW5nIGlzc3VlIGluIGkyY19wcm9iZSgpLgorCisqIFBhdGNoIGJ5IExlaWYgTGluZGhvbG0sIDI3IE1heSAyMDA0OgorICBGaXggYm9hcmRfaW5pdF9mKCkgZm9yIGRiYXUxeDAwIGJvYXJkLgorCisqIFBhdGNoIGJ5IEltcmUgRGVhaywgMjYgTWF5IDIwMDQ6CisgIE9uIE9NQVAxNjEwIHBsYXRmb3JtcyBjaGVjayBpZiBib290aW5nIGZyb20gUkFNKENTMCkgb3IgZmxhc2goQ1MzKS4KKyAgU2V0IGZsYXNoIGJhc2UgYWNjb3JkaW5nbHksIGFuZCBkZWNpZGUgd2hldGhlciB0byBkbyBvciBza2lwIGJvYXJkCisgIHNwZWNpZmljIHNldHVwIHN0ZXBzLgorCisqIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAyNiBNYXkgMjAwNDoKKyAgQWRkIG1pc3NpbmcgZGVmaW5lIGluIGluY2x1ZGUvYXNtLW02OGsvZ2xvYmFsX2RhdGEuaAorCisqIFBhdGNoIGJ5IEpvc2VmIEJhdW1nYXJ0bmVyLCAyNSBNYXkgMjAwNDoKKyAgQWRkIG1pc3NpbmcgZnVuY3Rpb25zIGdldF90aWNrcygpIGFuZCBnZXRfdGJjbGsoKSBpbiBsaWJfbTY4ay90aW1lLmMKKworKiBQYXRjaCBieSBQYXVsIFJ1aGxhbmQsIDI0IE1heSAyMDA0OgorICBmaXggU0RSQU0gaW5pdGlhbGl6YXRpb24gZm9yIExQRDdBNDAwIGJvYXJkLgorCisqIFBhdGNoIGJ5IEppYW4gWmhhbmcsIDIwIE1heSAyMDA0OgorICBhZGQgc3VwcG9ydCBmb3IgZW52aXJvbm1lbnQgaW4gTkFORCBmbGFzaAorCisqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIwIE1heSAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgSW50ZXJwaGFzZSBpU1BBTiBib2FyZHMuCisKKyogUGF0Y2hlcyBieSBQYXVsIFJ1aGxhbmQsIDE3IE1heSAyMDA0OgorICAtIEFkZCBJL08gZnVuY3Rpb25zIHRvIHRoZSBzbWM5MTExMSBldGhlcm5ldCBkcml2ZXIgdG8gc3VwcG9ydCB0aGUKKyAgICBMb2dpYyBMUEQ3QTQweCBib2FyZHMuCisgIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBMb2dpYyBab29tIExIN0E0MHggYmFzZWQgU0RLIGJvYXJkKHMpLAorICAgIHNwZWNpZmljYWxseSB0aGUgTFBEN0E0MDAuCisKKyogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE1IE1heSAyMDA0OgorICAtIGNhbGwgTUFDIGFkZHJlc3MgcmVhZGluZyBjb2RlIGFsc28gZm9yIFNNU0M5MUMxMTE7CisgIC0gbWFrZSBTTVNDOTFDMTExIHRpbWVvdXQgY29uZmlndXJhYmxlLCByZW1vdmUgZHVwbGljYXRlIGNvZGUKKyAgLSBmaXggZ2V0X3RpbWVyKCkgZm9yIFBYQQorICAtIHVwZGF0ZSBkb2MvUkVBRE1FLkpGRlMyCisgIC0gdXNlICJib290ZmlsZSIgZW52IHZhcmlhYmxlIGFsc28gZm9yIGpmZnMyCisKKyogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgMTQgTWF5IDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBDb2dlbnQgQ1NCNDcyIGJvYXJkICg4TUIgRmxhc2ggUmV2KQorCisqIFBhdGNoIGJ5IFRob21hcyBWaWVod2VnZXIsIDE0IE1heSAyMDA0OgorICAtIGZsYXNoLmg6IG1vcmUgZmxhc2ggdHlwZXMgYWRkZWQKKyAgLSBpbW1hcF84MjYwLmg6IHNvbWUgYml0cyBhZGRlZCAodXNlZnVsIGZvciBSTUlJKQorICAtIGNtZF9jb25pbmZvLmM6IHR5cG8gY29ycmVjdGVkLCBwcmludGYgLT4gcHV0cworICAtIHJlZHVjZWQgc2l6ZSBieSByZXBsYWNpbmcgc3BhY2VzIHdpdGggdGFiCisKKyogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxMyBNYXkgMjAwNDoKKyAgQWRkICdpbWdleHRyYWN0JyBjb21tYW5kOiBleHRyYWN0IG9uZSBwYXJ0IG9mIGEgbXVsdGkgZmlsZSBpbWFnZS4KKworKiBQYXRjaGVzIGJ5IEpvbiBMb2VsaWdlciwgMTEgTWF5IDIwMDQ6CisgIER5bmFtaWNhbGx5IGhhbmRsZSBSRVYxIGFuZCBSRVYyIE1QQzg1eHggcGFydHMuCisgICAgKEpvbiBMb2VsaWdlciwgMTAtTWF5LTIwMDQpLgorICBOZXcgY29uc2lzdGVudCBtZW1vcnkgbWFwIGFuZCBMb2NhbCBBY2Nlc3MgV2luZG93IGFjcm9zcyBNUEM4NXh4IGxpbmUuCisgIE5ldyBDQ1NSQkFSIGF0IDB4RTAwMF8wMDAwIG5vdy4KKyAgQWRkIFJBUElEIEkvTyBtZW1vcnkgbWFwLgorICBOZXcgbWVtb3J5IG1hcCBpbiBSRUFETUUuTVBDODV4eGFkcworICAgIChLdW1hciBHYWxhLCAxMC1NYXktMjAwNCkKKyAgQmV0dGVyIGJvYXJkIGFuZCBDUFUgaWRlbnRpZmljYXRpb24gb24gTVBDODV4eCBib2FyZHMgYXQgYm9vdC4KKyAgICAoSm9uIExvZWxpZ2VyLCAxMC1NYXktMjAwNCkKKyAgU0RSQU0gY2xvY2sgY29udHJvbCBmaXhlcyBvbiBNUEM4NTQwQURTICYgTVBDODU2MCBib2FyZHMuCisgIFNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBNUEM4NTQwQURTICYgTVBDODU2MEFEUyBjbGVhbmVkIHVwLgorICAgIChKaW0gUm9iZXJ0c29uLCAxMC1NYXktMjAwNCkKKyAgUmV3cml0ZSBvZiB0aGUgTVBDODV4eCBUaHJlZSBTcGVlZCBFdGhlcm5ldCBDb250cm9sbGVyIChUU0VDKSBkcml2ZXIuCisgIFN1cHBvcnRzIG11bHRpcGxlIFBIWXMuCisgICAgKEFuZHkgRmxlbWluZywgMTAtTWF5LTIwMDQpCisgIFNvbWUgUkVBRE1FLk1QQzg1eHhhZHMgdXBkYXRlcy4KKyAgICAoS3VtYXIgR2FsYSwgMTAtTWF5LTIwMDQpCisgIENvcHlyaWdodCB1cGRhdGVzIGZvciAiRnJlZXNjYWxlIgorICAgIChBbmR5IEZsZW1pbmcsIDEwLU1heS0yMDA0KQorCisqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDExIE1heSAyMDA0OgorICBBZGQgZmxhc2ggc3VwcG9ydCBmb3IgU1QgTTI5VzA0MEIKKyAgUmVkdWNlIEpTRSBzcGVjaWZpYyBmbGFzaC5jIHRvIHJlbW92ZSBkZWFkIGNvZGUuCisKKyogUGF0Y2ggYnkgTWFya3VzIFBpZXRyZWssIDA0IE1heSAyMDA0OgorICBGaXggY2xlYXJfYnNzIGNvZGUgZm9yIEFSTSBzeXN0ZW1zIChhbGwgZXhjZXB0IHMzYzQ0YjAgd2hpY2gKKyAgZG9lc24ndCBjbGVhciBCU1MgYXQgYWxsPykKKworKiBGaXggInBpbmciIHByb2JsZW0gb24gSU5DLUlQIGJvYXJkLiBTdHJhbmdlIHByb2JsZW06CisgIFNvbWV0aW1lcyB0aGUgc3RvcmUgd29yZCBpbnN0cnVjdGlvbiBoYW5ncyB3aGlsZSB3cml0aW5nIHRvIG9uZSBvZgorICB0aGUgU3dpdGNoIHJlZ2lzdGVycywgYnV0IG9ubHkgaWYgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgMTYtYnl0ZQorICBhbGlnbmVkLiBNb3ZpbmcgdGhlIGluc3RydWN0aW9uIGludG8gYSBzZXBhcmF0ZSBmdW5jdGlvbiBzb21laG93CisgIG1ha2VzIHRoZSBwcm9ibGVtIGdvIGF3YXkuCisKKyogUGF0Y2ggYnkgUmlzaGkgQmhhdHRhY2hhcnlhLCAwOCBNYXkgMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIFRJIE9NQVA1OTEyIE9TSyBCb2FyZAorCisqIFBhdGNoIGJ5IFNhbSBTb25nIE1heSwgMDcgTWF5IDIwMDQ6CisgIEZpeCB0eXBvIG9mIFVQTSB0YWJsZSBmb3Igcm11IGJvYXJkCisKKyogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDA1IE1heSAyMDA0OgorICAtIEludHJhY29tIGJvYXJkIHVwZGF0ZS4KKyAgLSBBZGQgQ29kZWMgUE9TVC4KKworKiBBZGQgc3VwcG9ydCBmb3IgdGhlIHNlY29uZCBFdGhlcm5ldCBpbnRlcmZhY2UgZm9yIHRoZSAnUFBDaGFtZWxlb24nCisgIGJvYXJkLgorCisqIFBhdGNoIGJ5IERhdmUgUGV2ZXJsZXksIDMwIEFwciAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgT01BUDczMCBQZXJzZXVzMiBEZXZlbG9wbWVudCBib2FyZAorCisqIFBhdGNoIGJ5IEFsYW4gSi4gTHVzZSwgMjkgQXByIDIwMDQ6CisgIEZpeCBmbGFzaCBjaGlwLXNlbGVjdCAoT1IwKSBvcHRpb24gcmVnaXN0ZXIgc2V0dGluZyBvbiBGQURTIGJvYXJkcy4KKworKiBQYXRjaCBieSBBbGFuIEouIEx1c2UsIDI5IEFwciAyMDA0OgorICBSZXBvcnQgTUlJIG5ldHdvcmsgc3BlZWQgYW5kIGR1cGxleCBzZXR0aW5nIHByb3Blcmx5IHdoZW4KKyAgYXV0by1uZWdvdGlhdGUgaXMgbm90IGVuYWJsZWQuCisKKyogUGF0Y2ggYnkgSmFycmV0dCBSZWRkLCAyOSBBcHIgMjAwNDoKKyAgRml4IGhhbmcgb24gcmVzZXQgb24gT2NvdGVhIGJvYXJkIGR1ZSB0byBmbGFzaCBpbiB3cm9uZyBtb2RlLgorCisqIFBhdGNoIGJ5IERhdmUgUGV2ZXJsZXksIDI5IEFwciAyMDA0OgorICBhZGQgTUFDIGFkZHJlc3MgZGV0ZWN0aW9uIHRvIHNtYzkxMTExIGRyaXZlcgorCisqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjggQXByIDIwMDQ6CisgIGZpeCB0eXBvIGluIGxpYl9hcm0vYm9hcmQuYworCisqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDIwIEFwciAyMDA0OgorICAtIFJFQURNRSB1cGRhdGU6IGFkZCBDT05GSUdfQ1NCMjcyIGFuZCBjc2IyNzJfY29uZmlnCisgIC0gYWRkIGRlc2NyaXB0aW9ucyBmb3Igc29tZSBNSUkvUEhZIG9wdGlvbnMsIENPTkZJR19JMkNGQVNULCBhbmQKKyAgICBpMmNmYXN0IGVudmlyb25tZW50IHZhcmlhYmxlCisKKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTkgQXByIDIwMDQ6CisgIC0gUmVuYW1lIERVRVRfQURTIHRvIE1QQzg4NUFEUworICAtIFJlbmFtZSBDT05GSUdfRFVFVCB0byBDT05GSUdfTVBDODg1X0ZBTUlMWQorICAtIFJlbmFtZSBDT05GSUdfODY2X2V0X2FsIHRvIENPTkZJR19NUEM4NjZfRkFNSUxZCisgIC0gQ2xlYW4gdXAgRkFEUyBmYW1pbHkgcG9ydCB0byB1c2UgdGhlIG5ldyBkZWZpbmVzCisKKyogRml4IFBDSSBzdXBwb3J0IG9uIENQQzQ1IGJvYXJkCisKKyogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyNSBBcHIgMjAwNDoKKyAgQWRkIE5pb3MgR0RCL0pUQUcgQ29uc29sZSBzdXBwb3J0OgorICAtIEFkZCBzdHVicyB0byBzdXBwb3J0IGdkYiB2aWEgSlRBRy4KKyAgLSBBZGQgc3VwcG9ydCBmb3IgY29uc29sZSBvdmVyIEpUQUcuCisgIC0gTWlub3IgY2xlYW51cC4KKworKiBBZGQgc3VwcG9ydCBmb3IgQ0FUY2VudGVyIGJvYXJkIChiYXNlZCBvbiBQUENoYW1lbGVvbiBNRSBtb2R1bGUpCisKKyogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMTIgTWF5IDIwMDQ6CisgIFVzaW5nIGV4dGVybmFsIHdhdGNoZG9nIGZvciBLVVA0IGJvYXJkcyBpbiBtcGM4eHgvY3B1LmM7CisgIGxvYWRfc2VybnVtX2V0aGFkZHIoKSBmb3IgS1VQNCBib2FyZHMgaW4gbGliX3BwYy9ib2FyZC5jOworICB2YXJpb3VzIGNoYW5nZXMgdG8gS1VQNCBib2FyZCBzcGVjaWZpYyBmaWxlcworCisqIEZpeCBtaW5vciBuZXR3b3JrIHByb2JsZW0gb24gTVBDNTIwMDogbmVlZCBzb21lIGRlbGF5IGJldHdlZW4KKyAgcmVzZXR0aW5nIHRoZSBQSFkgYW5kIHNlbmRpbmcgdGhlIGZpcnN0IHBhY2tldC4gSW1wbGVtZW50ZWQgaW4gYQorICAibmF0dXJhbCIgd2F5IGJ5IGludm9raW5nIHRoZSBQSFkgcmVzZXQgYW5kIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgb25seSBvbmNlIGFmdGVyIHBvd2VyIG9uIHZzLiBlYWNoIHRpbWUgdGhlIGludGVyZmFjZSBpcyBicm91Z2h0IHVwLgorCisqIEFkZCBzb21lIGxpbWl0ZWQgc3VwcG9ydCBmb3IgbG93LXNwZWVkIGRldmljZXMgdG8gU0w4MTEgVVNCIGNvbnRyb2xsZXIKKyAgKGF0IGxlYXN0ICJ1c2IgcmVzZXQiIG5vdyBwYXNzZXMgc3VjY2Vzc2Z1bGx5IGFuZCAidXNiIGluZm8iIGRpc3BsYXlzCisgIGNvcnJlY3QgaW5mb3JtYXRpb24pCisKKyogQ2hhbmdlIGluaXQgc2VxdWVuY2UgZm9yIG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlczogaW5pdGlhbGl6ZQorICBvbi1jaGlwIGludGVyZmFjZXMgYmVmb3JlIGV4dGVybmFsIGNhcmRzLgorCisqIEZpeCBtZW1vcnkgbGVhayBpbiB0aGUgTkFORC1zcGVjaWZpYyBKRkZTMiBjb2RlCisKKyogRml4IFNMODExIFVTQiBjb250cm9sbGVyIHdoZW4gYXR0YWNoZWQgdG8gYSBVU0IgaHViCisKKyogRml4IGNvbmZpZyBvcHRpb24gc3BlbGxpbmcgaW4gUE01MjAgY29uZmlnIGZpbGUKKworKiBGaXggUEhZIGRpc2NvdmVyeSBwcm9ibGVtIGluIGNwdS9tcGM4eHgvZmVjLmMgKGludHJvZHVjZWQgYnkKKyAgcGF0Y2hlcyBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMzAgTWFyIDIwMDQpCisKKyogRml4IG1pbm9yIE5BTkQgSkZGUzIgcmVsYXRlZCBpc3N1ZQorCisqIEZpeGVzIGZvciBTTDgxMSBVU0IgY29udHJvbGxlcjoKKyAgLSBpbXBsZW1lbnQgd29ya2Fyb3VuZCBmb3IgYnJva2VuIG1lbW9yeSBzdGljaworICAtIGltcHJvdmUgZXJyb3IgaGFuZGxpbmcKKworKiBJbmNyZWFzZSBwYWNrZXQgc2VuZCB0aW1lb3V0IHRvIDEgbXMgaW4gY3B1L21wYzh4eC9zY2MuYyB0byBiZXR0ZXIKKyAgY29wZSB3aXRoIGNvbmdlc3RlZCBuZXR3b3Jrcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDEuMS4xOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDIzIEFwciAyMDA0OgorICBGaXggVlNDL0NJUyA4MjAxIHBoeSBkZXNjcmFtYmxlciBpbnRlcm9wZXJhYmlsaXR5IHRpbWluZyBkdWUgdG8KKyAgZXJyYXRhIGZyb20gVml0ZXNzZSBTZW1pY29uZHVjdG9yLgorCisqIFBhdGNoIGJ5IFBoaWxpcHBlIFJvYmluLCAyMiBBcHIgMjAwNDoKKyAgRml4IGV0aGVybmV0IGNvbmZpZ3VyYXRpb24gZm9yICJ2ZXJzYXRpbGUiIGJvYXJkCisKKyogUGF0Y2ggYnkgS3NoaXRpaiBHdXB0YSwgMjEgQXByIDIwMDQ6CisgIFJlbW92ZSBidXN5IGxvb3AgYW5kIHVzZSBNUFUgdGltZXIgZnIgdXNsZWVwKCkgb24gT01BUDE1MTAvMTYxMCBib2FyZHMKKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNCBGZWIgMjAwNDoKKyAgRml4IGEgYnVnIGluIEFUOTFSTTkyMDAgZXRoZXJuZXQgZHJpdmVyOgorICBUaGUgTUlJIGludGVyZmFjZSBpcyBub3cgaW5pdGlhbGl6ZWQgYmVmb3JlIGFjY2Vzc2luZyB0aGUgUEhZLgorCisqIFBhdGNoIGJ5IEpvaG4gS2VybCwgMTkgQXByIDIwMDQ6CisgIFVzZSBVLWJvb3QncyBtaWlwaHkuaCBmb3IgUEhZIHJlZ2lzdGVyIG5hbWVzLCByYXRoZXIgdGhhbgorICBpbnRyb2R1Y2luZyBhIG5ldyBoZWFkZXIgZmlsZS4KKworKiBVcGRhdGUgcGNpX2lkcy5oIGZyb20gbGludXgtMi40LjI2CisKKyogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMTkgQXByIDIwMDQ6CisgIEZpeCBwcm9ibGVtIGNhdXNlIGJ5IFZMQU4gZnVuY3Rpb24gb24gbGl0dGxlIGVuZGlhbiBhcmNoaXRlY3R1cmUKKyAgd2l0aG91dCBWTEFOIGVudmlyb25tZW50CisKKyogQ2xlYW4gdXAgdGhlIFRRTTh4eF9ZWU1IeiBjb25maWd1cmF0aW9uczsgYWxsb3cgdG8gdXNlIHRoZSBzYW1lCisgIGJpbmFyeSBpbWFnZSBmb3IgYWxsIGNsb2NrIGZyZXF1ZW5jaWVzLiBJbXBsZW1lbnQgcnVuLXRpbWUKKyAgb3B0aW1pemF0aW9uIG9mIGZsYXNoIGFjY2VzcyB0aW1pbmcgYmFzZWQgb24gdGhlIGFjdHVhbCBidXMKKyAgZnJlcXVlbmN5LgorCisqIE1vZGlmeSBLVVA0WCBib2FyZCBjb25maWd1cmF0aW9uIHRvIHVzZSBTTDgxMSBkcml2ZXIgZm9yIFVTQiBtZW1vcnkKKyAgc3RpY2tzIChpbmNsdWRpbmcgRkFUIC8gVkZBVCBmaWxlc3lzdGVtIHN1cHBvcnQpCisKKyogQWRkIFNMODExIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgZHJpdmVyIGZvciBVU0IKKworKiBBZGQgQ0ZHX0kyQ19FRVBST01fQUREUl9PVkVSRkxPVyBkZXNyaXB0aW9uIHRvIFJFQURNRQorCisqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxOSBBcHIgMjAwNDoKKyAgQWxsb3cgdG8gdXNlIHNoZWxsIHN0eWxlIHN5bnRheCAoaS4gZS4gJHt2YXJ9ICkgd2l0aCBzdGFuZGFyZCBwYXJzZXIuCisgIE1pbm9yIHBhdGNoZXMgZm9yIEludHJhY29tIGJvYXJkcy4KKworKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbCwgMTkgQXByIDIwMDQ6CisgIGNsZWFudXAgc3VwcG9ydCBmb3IgQ0YvSURFIG9uIFBDTUNJQSBmb3IgUFhBMjVYCisKKyogVGVtcG9yYXJpbHkgZGlzYWJsZWQgSm9obiBLZXJsJ3MgZXh0ZW5kZWQgTUlJIGNvbW1hbmQgY29kZSBiZWNhdXNlCisgICJtaWl2YWxzLmgiIGlzIG1pc3NpbmcKKworKiBQYXRjaGVzIGJ5IE1hcmsgSm9uYXMsIDEzIEFwciAyMDA0OgorICAtIFJlbW92ZSBDUzAgY2hpcCBzZWxlY3QgdGltaW5nIHNldHRpbmcgZnJvbSBjcHUvbXBjNXh4eC9zdGFydC5TCisgIC0gQWRkIHN5bmMgaW5zdHJ1Y3Rpb25zIHRvIEljZUN1YmUgU0RSQU0gaW5pdCBjb2RlCisgIC0gTW92ZSBTRFJBTSBjaGlwIGNvbnN0YW50cyBpbnRvIHNlcGVyYXRlIGluY2x1ZGUgZmlsZXMKKyAgLSBVbmlmeSBERFIgYW5kIFNEUiBpbml0aWFsaXphdGlvbiBjb2RlCisgIC0gVW5pZnkgYWxsIEljZUN1YmUgKExpdGU1eHh4KSB0YXJnZXQgbmFtZXMKKworKiBQYXRjaCBieSBKb2huIEtlcmwsIDE2IEFwciAyMDA0OgorICBFbmFibGUgcmFuZ2VzIGluIG1paSBjb21tYW5kLCBlLmcuIG1paSByZWFkIDAtMWYgMCBvcgorICBtaWkgcmVhZCA0LTcgMTgtMWEuICBBbHNvIGFkZCBtaWkgZHVtcCBzdWJjb21tYW5kIGZvcgorICBwcmV0dHktcHJpbnRpbmcgc3RhbmRhcmQgcmVncyAwLTUuCisKKyogUGF0Y2ggYnkgIFN0ZXBoZW4gV2lsbGlhbXMsIDE2IEFwcmlsIDIwMDQ6CisgIGZpeCB0eXBvIGluIEpTRS5oOyB1cGRhdGUgTUFJTlRBSU5FUlMKKworKiBQYXRjaCBieSBNYXR0aGV3IFMuIE1jQ2xpbnRvY2ssIDE0IEFwciAyMDA0OgorICBmaXggaW5pdGRyYW0gZnVuY3Rpb24gZm9yIHV0eDgyNDUgYm9hcmQKKworKiBQYXRjaCBieSBNYXJrdXMgUGlldHJlaywgMTQgQXByIDIwMDQ6CisgIHVzZSBBVEFHX0lOSVRSRDIgaW5zdGVhZCBvZiBkZXByZWNhdGVkIEFUQUdfSU5JVFJEIHRhZworCisqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAxOCBBcHIgMjAwNDoKKyAgcHJvdmlkZSB0aGUgSURFIFJlc2V0IEZ1bmN0aW9uIGZvciBFTUsgNTIwMCBib2FyZHMKKworKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAxMiBBcHIgMjAwNDoKKyAgZml4IHBjaV9ob3NlX3dyaXRlX2NvbmZpZ197Ynl0ZSx3b3JkfV92aWFfZHdvcmQgcHJvYmxlbXMKKworKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDEyIEFwciAyMDA0OgorICBVcGRhdGUgbWF4IFJBTSBzaXplIGZvciBkZWJyaXMgYm9hcmQKKworKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwOCBBcHIgMjAwNDoKKyAgQWRkIFRMQiBlbnRyeSBmb3Igc2Vjb25kIERJTU0gc2xvdCBvbiBvY290ZWEKKworKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOCBBcHIgMjAwNDoKKyAgYWRkIFJUTDgxNjkgbmV0d29yayBkcml2ZXIKKworKiBQYXRjaCBieSBEYW4gTWFsZWssIDA3IEFwciAyMDA0OgorICAtIEFkZCBzdXBwb3J0IGZvciBSUEMvU1R4IEdQMywgTW90b3JvbGEgODU2MCBib2FyZAorICAtIFVwZGF0ZSA4NXh4IFRTRUMgZHJpdmVyIHNvIGl0IHNlYXJjaGVzIE1JSSBmb3IgZmlyc3QgYXZhaWxhYmxlIFBIWQorICAgIGFuZCB1c2VzIHRoYXQgb25lLgorICAtIEFkZCBmdW5jdGlvbnMgdG8gc3VwcG9ydCBjb25zb2xlIE1JSSBjb21tYW5kcy4KKworKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAwNyBBcHIgMjAwNDoKKyAgTW92ZSBpbml0aWFsaXphdGlvbiBvZiBiaV9paWNfZmFzdFtdCisgIGZyb20gYm9hcmRfaW5pdF9mKCkgdG8gYm9hcmRfaW5pdF9yKCkKKworKiBQYXRjaCBieSBZYXN1c2hpIFNob2ppLCAwNyBBcHIgMjAwNDoKKyAgQ2xlYW51cCBtaWNyb2JsYXplIHBvcnQKKworKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDA3IEFwciAyMDA0OgorICBBZGQgYXV0byBTRFJBTSBtb2R1bGUgZGV0ZWN0aW9uIGZvciBEZWJyaXMgYm9hcmQKKworKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMDYgQXByIDIwMDQ6CisgIC0gRml4IHNvbWUgUENJIHByb2JsZW1zIG9uIHRoZSBNUEM4MjY2QURTIGJvYXJkCisgIC0gRml4IHRoZSBsb2NhdGlvbiBvZiBzb21lIFBDSSBlbnRyaWVzIGluIHRoZSBpbW1hcCBzdHJ1Y3R1cmUKKworKiBQYXRjaCBieSBZYXN1c2hpIFNob2ppLCAwNyBBcHIgMjAwNDoKKyAgLSBhZGQgc3VwcG9ydCBmb3IgbWljcm9ibGF6ZSBwcm9jZXNzb3JzCisgIC0gYWRkIHN1cHBvcnQgZm9yIEF0bWFya1RlY2hubyAic3V6YWt1IiBib2FyZAorCisqIENvbmZpZ3VyZSBQUENoYW1lbGVvbiBib2FyZCB0byB1c2UgcmVkdW5kYW5kIGVudmlyb25tZW50IGluIGZsYXNoCisKKyogQ29uZmlndXJlIFBQQ2hhbWVsZW9uIGJvYXJkIHRvIHVzZSBKRkZTMiBOQU5EIHN1cHBvcnQuCisKKyogQWRkZWQgc3VwcG9ydCBmb3IgSkZGUzIgZmlsZXN5c3RlbSAocmVhZC1vbmx5KSBvbiB0b3Agb2YgTkFORCBmbGFzaAorCisqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxNiBBcHIgMjAwNDoKKyAgTEJBNDggZml4ZXMKKworKiBQYXRjaGVzIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNiBBcHIgMjAwNDoKKyAgLSBhZGQgc3VwcG9ydCBmb3IgYSBuZXcgdmVyc2lvbiBvZiBhbiBJbnRyYWNvbSBib2FyZCBhbmQgZml4CisgICAgdmFyaW91cyBvdGhlciB0aGluZ3Mgb24gb3RoZXJzLgorICAtIGFkZCB2ZXJpZnkgc3VwcG9ydCB0byB0aGUgY3JjMzIgY29tbWFuZCAoZGVmaW5lCisgICAgQ09ORklHX0NSQzMyX1ZFUklGWSB0byBlbmFibGUgaXQpCisgIC0gZml4IEZFQyBkcml2ZXIgZm9yIE1QQzh4eCBzeXN0ZW1zOgorICAgIDEuIGZpeCBjb21waWxhdGlvbiBwcm9ibGVtcyBmb3IgYm9hcmRzIHRoYXQgdXNlIGR5bmFtaWMKKyAgICAgICBhbGxvY2F0aW9uIG9mIERQUkFNCisgICAgMi4gc2h1dCBkb3duIEZFQyBhZnRlciBuZXR3b3JrIHRyYW5zZmVycworICAtIEhVU0ggcGFyc2VyIGZpeGVzOgorICAgIDEuIEEgbmV3IHRlc3QgY29tbWFuZCB3YXMgYWRkZWQuIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YKKyAgICAgICB0aGUgb25lIGluIHRoZSBib3VybmUgc2hlbGwuCisgICAgMi4gQSBuZXcgZXhpdCBjb21tYW5kIHdhcyBhZGRlZCB3aGljaCB0ZXJtaW5hdGVzIHRoZSBjdXJyZW50CisgICAgICAgZXhlY3V0aW5nIHNjcmlwdC4KKyAgICAzLiBGaXhlZCBoYW5kaW5nIG9mICQ/IChleGl0IGNvZGUgb2YgbGFzdCBleGVjdXRlZCBjb21tYW5kKQorICAtIEZpeCBzb21lIGNvbXBpbGUgcHJvYmxlbXM7CisgICAgYWRkICJvbmNlIiBmdW5jdGlvbmFsaXR5IGZvciB0aGUgbmV0cmV0cnkgdmFyaWFibGUKKworKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDAyIEFwciAyMDA0OgorICBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgQXNzYWJldCBib2FyZAorCisqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDAxIEFwciAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgUGljdHVyZSBFbGVtZW50cyBKU0UgYm9hcmQKKworKiBQYXRjaCBieSBDaHJpc3RpYW4gUGVsbCwgMDEgQXByIDIwMDQ6CisgIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCBmb3IgUFhBIHN5c3RlbXMuCisKKyogUGF0Y2hlcyBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMzAgTWFyIDIwMDQ6CisgIC0gYWRkIGF1dG8tY29tcGxldGUgc3VwcG9ydCB0byB0aGUgVS1Cb290IENMSQorICAtIGFkZCBzdXBwb3J0IGZvciBORVRUQSBhbmQgTkVUUEhPTkUgYm9hcmRzOyBmaXggTkVUVklBIGJvYXJkCisgIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBFcHNvbiAxNTZ4IHNlcmllcyBvZiBncmFwaGljYWwgZGlzcGxheXMKKyAgICAoVGhlc2UgZGlzcGxheXMgYXJlIHNlcmlhbCBhbmQgbm90IHN1aXRhYmxlIGZvciB1c2luZyBhIG5vcm1hbAorICAgIGZyYW1lYnVmZmVyIGNvbnNvbGUgb24gdGhlbSkKKyAgLSBhZGQgaW5mcmFzdHJ1Y3R1cmUgbmVlZGVkIGluIG9yZGVyIHRvIFBPU1QgYW55IERTUHMgaW4gYSBib2FyZAorICAtIGltcHJvdmUgYW5kIGZpeCB2YXJpb3VzIHRoaW5ncyBpbiB0aGUgTVBDOHh4IEZFQyBkcml2ZXI6CisgICAgMS4gVGhlIG5ldyA4N3ggYW5kIDg4eCBzZXJpZXMgb2YgcHJvY2Vzc29ycyBoYXZlIHR3byBGRUNzLAorICAgICAgIGFuZCB0aGUgbmV3IGRyaXZlciBzdXBwb3J0cyB0aGVtIGJvdGguCisgICAgMi4gQW5vdGhlciBjaGFuZ2UgaW4gdGhlIDg3eC84OHggc2VyaWVzIGlzIHN1cHBvcnQgZm9yCisgICAgICAgdGhlIFJNSUkgKFJlZHVjZWQgTUlJKSBpbnRlcmZhY2UuIEhvd2V2ZXIgbnVtZXJvdXMKKyAgICAgICBjaGFuZ2VzIGFyZSBuZWVkZWQgdG8gbWFrZSBpdCB3b3JrIHNpbmNlIHRoZSBQSFlzCisgICAgICAgYXJlIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBsaW5lcy4gVGhhdCBtZWFucyB0aGF0CisgICAgICAgeW91IGhhdmUgdG8gYWRkcmVzcyB0aGVtIGNvcnJlY3RseSBvdmVyIHRoZSBNSUkKKyAgICAgICBpbnRlcmZhY2UuCisgICAgMy4gV2Ugbm93IGNvcnJlY3RseSBtYXRjaCB0aGUgTUlJL1JNSUkgaW50ZXJmYWNlCisgICAgICAgY29uZmlndXJhdGlvbiB0byB3aGF0IHRoZSBQSFkgcmVwb3J0cy4KKyAgLSBGaXggcHJvYmxlbSB3aGVuIHJlYWRpbmd0aGUgTUlJIHN0YXR1cyByZWdpc3Rlci4gRHVlIHRvIHRoZQorICAgIGludGVybmFsIGRlc2lnbiBvZiBtYW55IFBIWXMgeW91IGhhdmUgdG8gcmVhZCB0aGUgcmVnaXN0ZXIKKyAgICB0d2ljZS4gVGhlIHByb2JsZW0gaXMgbW9yZSBhcHBhcmVudCBpbiAxME1iaXQgbW9kZS4KKyAgLSBhZGQgbmV3IG1vZGUgIi5qZmZzMnMiIGZvciByZWFkaW5nIGZyb20gYSBOQU5EIGRldmljZTogaXQganVzdAorICAgIHNraXBzIG92ZXIgYmFkIGJsb2Nrcy4KKyAgLSBhZGQgbmV0d29ya2luZyBzdXBwb3J0IGZvciBWTEFOcyAoODAyLjFxKSwgYW5kIENEUCAoQ2lzY28KKyAgICBEaXNjb3ZlcnkgUHJvdG9jb2wpCisgIC0gc29tZSBtaW5vciBwYXRjaGVzIC8gY2xlYW51cAorCisqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDI4IE1hciAyMDA0OgorICAtIEFkZCBzdXBwb3J0IGZvciBNUEM4MjcyIGZhbWlseSBpbmNsdWRpbmcgTVBDODI0Ny84MjQ4LzgyNzEvODI3MgorICAtIEFkZCBzdXBwb3J0IGZvciBNUEM4MjcyQURTIGV2YWx1YXRpb24gYm9hcmQgKGFub3RoZXIgZmxhdm91ciBvZiBNUEM4MjYwQURTKQorICAtIENoYW5nZSBjb25maWd1cmF0aW9uIG1ldGhvZCBmb3IgTVBDODI2MEFEUyBmYW1pbHkKKworKiBhZGQgc3RhcnR1cCBjb2RlIHRvIGNsZWFyIHRoZSBCU1Mgb2Ygc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMKKworKiBGaXggaWYgLyBlbGlmIGhhbmRsaW5nIGJ1ZyBpbiBIVVNIIHNoZWxsCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIFUtQm9vdCAxLjEuMDoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBQYXRjaCBieSBNYXJrIEpvbmFzOiBSZW1vdmUgY29uZmlnLnRtcCBmaWxlcyBvbmx5IHdoZW4KKyAgdW5jb25maWd1cmluZyB0aGUgYm9hcmQKKworKiBBZGFwdCBSTVUgYm9hcmQgZm9yIGJpZ2dlciBmbGFzaCBtZW1vcnkKKworKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAxMyBNYXIgMjAwMzoKKyAgQWRkIHN1cHBvcnQgZm9yIEtVUDRYIEJvYXJkCisKKyogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDIxIE1hciAyMDA0CisgIEFkZCBSZWlzZXJmcyBzdXBwb3J0CisKKyogUGF0Y2ggYnkgSGlua28gS29jZXZhciwgMjAgTWFyIDIwMDQKKyAgLSBBZGQgYXV0by1yZWxlYXNlIGZvciBTTVNDIExBTjkxYzExMSBkcml2ZXIKKyAgLSBBZGQgc2F2ZS9yZXN0b3JlIG9mIFBUUiBhbmQgUE5SIHJlZ3MgYXMgc3VnZ2VzdGVkIGluIGRhdGFzaGVldAorCisqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDE5IE1hcmNoIDIwMDQKKyAgSW5jcmVhc2Ugc3BlZWQgb2Ygc2VjdG9yIHJlYWRzIGZyb20gU3lzdGVtQUNFLAorICBzaG9ydGVuIHBvbGwgdGltZW91dCBhbmQgcmVtb3ZlIGEgdXNlbGVzcyByZXNldAorCisqIFBhdGNoIGJ5IFRvbHVuYXkgT3JrdW4sIDE5IE1hciAyMDA0OgorICBNYWtlIEdpZ0UgUEhZIDEwMDBNYnBzIFNwZWVkL0R1cGxleCBkZXRlY3Rpb24gY29uZGl0aW9uYWwKKyAgKENPTkZJR19QSFlfR0lHRSkKKworKiBQYXRjaCBieSBCcmFkIEtlbXAsIDE4IE1hciAyMDA0OgorICBwcmV2ZW50IG1hY2hpbmUgY2hlY2tzIGR1cmluZyBhIFBDSSBzY2FuCisKKyogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6CisgIEZpeCBzdHJpbmcgY2xlYW5pbmcgaW4gSURFIGlkZW50aWZpY2F0aW9uCisKKyogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTggTWFyIDIwMDQ6CisgIC0gVW5pZnkgdmlkZW8gbW9kZSBoYW5kbGluZyBmb3IgQ2hpcHMgJiBUZWNobm9sb2dpZXMgNjkwMDAgVmlkZW8KKyAgICBjaGlwIGFuZCBTaWxpY29uIE1vdGlvbiBTTUkgNzEyLzcxMC84MTAgVmlkZW8gY2hpcAorICAtIEFkZCBzZWxlY3Rpb24gb2YgdGhlIHZpZGVvIG91dHB1dCAoQ1JUIG9yIExDRCkgdmlhICd2aWRlb291dCcKKyAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3IgdGhlIFNpbGljb24gTW90aW9uCisgIC0gUkVBRE1FIHVwZGF0ZQorCisqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE4IE1hciAyMDA0OgorICBpbmNsdWRlL2NvbW1vbi5oIHR5cG8gZml4CisKKyogUGF0Y2hlcyBieSBUb2x1bmF5IE9ya3VuLCAxNyBNYXIgMjAwNDoKKyAgLSBBZGQgc3VwcG9ydCBmb3IgYmQtPmJpX2lpY19mYXN0W10gaW5pdGlhbGl6YXRpb24gdmlhIGVudmlyb25tZW50CisgICAgdmFyaWFibGUgImkyY2Zhc3QiIChDT05GSUdfSTJDRkFTVCkKKyAgLSBBZGQgImkyY2Zhc3QiIHUtYm9vdCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzdXBwb3J0IGZvciBjc2IyNzIKKworKiBQYXRjaCBieSBDYXJsIFJpZWNoZXJzLCAxNyBNYXIgMjAwNDoKKyAgSWdub3JlICdcMCcgY2hhcmFjdGVycyBpbiBjb25zb2xlIGlucHV0IGZvciB1c2Ugd2l0aCB0ZWxuZXQgYW5kCisgIHRlbGNvIHBhZHMuCisKKyogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxNyBNYXIgMjAwNDoKKyAgdHlwbyBmaXggZm9yIHN0cnN3YWIgcHJvdG90eXBlICNpZmRlZgorCisqIFBhdGNoZXMgYnkgVGhvbWFzIFZpZWh3ZWdlciwgMTYgTWFyIDIwMDQ6CisgIC0gc2hvdyBQQ0kgY2xvY2sgZnJlcXVlbmN5IG9uIE1QQzgyNjAgc3lzdGVtcworICAtIGFkZCBGQ0NfUFNNUl9STUlJIGZsYWcgZm9yIEhpUDcgcHJvY2Vzc29ycworICAtIGluIGRvX2pmZnMyX2ZzbG9hZCgpLCB0YWtlIGxvYWQgYWRkcmVzcyBmcm9tIGxvYWRfYWRkciBpZiBub3Qgc2V0CisgICAgZXhwbGljaXQsIHVwZGF0ZSBsb2FkX2FkZHIgb3RoZXJ3aXNlCisgIC0gcmVwbGFjZWQgcHJpbnRmIGJ5IHB1dGMvcHV0cyB3aGVuIG5vIGZvcm1hdHRpbmcgaXMgbmVlZGVkCisgICAgKHNtYWxsZXIgY29kZSBzaXplLCBmYXN0ZXIgZXhlY3V0aW9uKQorCisqIFBhdGNoIGJ5IFBoaWxsaXBwZSBSb2JpbiwgMTYgTWFyIDIwMDQ6CisgIGF2b2lkIGRlcmVmZXJlbmNpbmcgTlVMTCBwb2ludGVyIGluIGxpYl9hcm0vYXJtbGludXguYworCisqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDE1IE1hciAyMDA0OgorICBGaXggQ09ORklHX1NFUklBTF9TT0ZUV0FSRV9GSUZPIGRvY3VtZW50YXRpb24KKworKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxNSBNYXIgMjAwNDoKKyAgSW5pdGlhbGl6ZSBiaV9vcGJmcmVxIHRvIHJlYWwgT1BCIGZyZXF1ZW5jeSB2aWEgZ2V0X09QQl9mcmVxKCkKKworKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxNSBNYXIgMjAwNDoKKyAgVXBkYXRlIENSRURJVFMgJiBNQUlOVEFJTkVSUyBmaWxlcyBmb3IgUFBDNDQwR1ggJiBPY290ZWEgcG9ydAorCisqIEFkZCBzdGFydC11cCBkZWxheSB0byBtYWtlIHN1cmUgcG93ZXIgaGFzIHN0YWJpbGl6ZWQgYmVmb3JlCisgIGF0dGVtcHRpbmcgdG8gc3dpdGNoIG9uIFVTQiBvbiBTWDEgYm9hcmQuCisKKyogUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAxOCBNYXIgMjAwNDoKKyAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgWE0yNTAgYm9hcmQgKFBYQTI1NSkKKyAgLSBBZGQgc3VwcG9ydCBmb3IgTWljcm9TeXMgUE04MjggYm9hcmQgKE1QQzgyODApCisgIC0gQWRkIHN1cHBvcnQgZm9yIDMyIE1CIEZsYXNoIG9uIFBNODI1LzgyNgorICAtIG5ldyBTRFJBTSByZWZyZXNoIHJhdGUgZm9yIFBNODI1L1BNODI2CisgIC0gYWRkZWQgc3VwcG9ydCBmb3IgTWljcm9TeXMgUE01MjAgKE1QQzUyMDApCisgIC0gcmVwbGFjZWQgUXVlcnkgYnkgSWRlbnRpZnkgY29tbWFuZCBpbiBDUFU4Ni9mbGFzaC5jCisgICAgdG8gc3VwcG9ydCAyOEYxNjBGM0IKKworKiBGaXggd3JhcCBhcm91bmQgcHJvYmxlbSB3aXRoIHVkZWxheSgpIG9uIEFSTTkyMFQKKworKiBBZGQgc3VwcG9ydCBmb3IgTWFjcm9uaXggZmxhc2ggb24gVFJBQiBib2FyZAorCisqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE1IE1hciAyMDA0OgorICBGaXggYnVmZmVyIG92ZXJmbG93IGluIElERSBpZGVudGlmaWNhdGlvbgorCisqIEZpeCBwb3dlci1vZmYgb2YgTENEIGZvciBvdXQtb2YtYmFuZCB0ZW1wZXJhdHVyZXMgb24gTFdNT04gYm9hcmQKKworKiBSZW1vdmUgcmVkdW5kYW5kICNkZWZpbmUgaW4gSWNlQ3ViZS5oCisKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjcgRmViIDIwMDQ6CisgIC0gQWRkaW5nIGdldF90aWNrcygpIGFuZCBnZXRfdGJjbGsoKSBmb3IgQVQ5MVJNOTIwMAorICAtIE1hbnkgd2hpdGUgc3BhY2UgZml4ZXMgaW4gY3B1L2F0OTFybTkyMDAvaW50ZXJydXB0cy5jCisKKyogUGF0Y2hlcyBieSBTdGV2ZW4gU2Nob2x6LCAyMCBGZWIgMjAwNDoKKyAgc29tZSBjbGVhbnVwIGluIEFUOTFSTTkyMDAgcmVsYXRlZCBjb2RlCisKKyogUGF0Y2hlcyBieSBUcmF2aXMgU2F3eWVyLCAxMiBNYXIgMjAwNDoKKyAgLSBGaXggR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0IGZvciA0NDBHWAorICAtIEFkZCBHaWdhYml0IEV0aGVybmV0IFN1cHBvcnQgdG8gTUlJIFBIWSB1dGlsaXRpZXMKKworKiBQYXRjaCBieSBCcmFkIEtlbXAsIDEyIE1hciAyMDA0OgorICBGaXhlcyBmb3IgZHJpdmVycy9jZmlfZmxhc2guYzoKKyAgLSBCZXR0ZXIgc3VwcG9ydCBmb3IgeDgveDE2IGltcGxlbWVudGF0aW9ucworICAtIEFkZGVkIGZhaWx1cmUgZm9yIEFNRCBjaGlwcyBhdHRlbXB0aW5nIHRvIHVzZSBDRkdfRkxBU0hfVVNFX0JVRkZFUl9XUklURQorICAtIEFkZGVkIGRlZmluZXMgZm9yIEFNRCBjb21tYW5kIGFuZCBhZGRyZXNzIGNvbnN0YW50cworCisqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTIgTWFyIDIwMDQ6CisgIEZpeCBnZXRfZGVudGZyb21kaXIoKSB0byBjb3JyZWN0bHkgaGFuZGxlIGRlbGV0ZWQgZGVudHJpZXMKKworKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDExIE1hciAyMDA0OgorICBSZW1vdmUgaGFyZCBjb2RlZCBuZXR3b3JrIHNldHRpbmdzIGluIFRJIE9NQVAxNjEwIEgyCisgIGRlZmF1bHQgYm9hcmQgY29uZmlnCisKKyogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxMSBNYXIgMjAwNDoKKyAgYWRkIHN1cHBvcnQgZm9yIEFEUyBHcmFwaGljc0NsaWVudCsgYm9hcmQuCisKKyogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMTEgTWFyIDIwMDQ6CisgIC0gYWRkIGJpdG1hcCBjb21tYW5kIGFuZCBzcGxhc2ggc2NyZWVuIHN1cHBvcnQgaW4gY2ZiIGNvbnNvbGUKKyAgLSBhZGQgW29wdGlvbmFsXSBvcmlnaW4gaW4gdGhlIGJpdG1hcCBkaXNwbGF5IGNvbW1hbmQKKworKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAxMSBNYXIgMjAwNDoKKyAgRml4IG9jb3RlYSBib2FyZCBlYXJseSBpbml0IGludGVycnVwdCBzZXR1cC4KKworKiBQYXRjaCBieSBUaG9tYXMgVmllaHdlZ2VyLCAxMSBNYXIgMjAwNDoKKyAgUmVtb3ZlIHJlZHVuZGFuZCBjb2RlOyBhZGQgIFBDSS1zcGVjaWZpYyBiaXRzIHRvIGluY2x1ZGUvbXBjODI2MC5oCisKKyogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAwOSBNYXIgMjAwNAorICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgU1NWIEFETlAvRVNDMSAoTmlvcyBTb2Z0Y29yZSkKKworKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDkgTWFyIDIwMDQ6CisgIGZpeCByZWNlbnQgYnVpbGQgZmFpbHVyZSBmb3IgU0ExMTAwIHRhcmdldAorCisqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA5IE1hciAyMDA0OgorICBTdXBwb3J0IG5hdGl2ZSBpbnRlcnJ1cHQgbW9kZSBmb3IgdGhlIElCTTQ0MEdYLgorICBQcmV2aW91c2x5IGl0IHdhcyBydW5uaW5nIGluIDQ0MEdQIGNvbXBhdGliaWxpdHkgbW9kZS4KKworKiBQYXRjaCBieSBQaGlsaXBwZSBSb2JpbiwgMDkgTWFyIDIwMDQ6CisgIEFkZGVkIEFSTSBJbnRlZ3JhdG9yIEFQLCBDUCBhbmQgVmVyc2F0aWxlIFBCOTI2RUotUyBSZWZlcmVuY2UKKyAgUGxhdGZvcm0gc3VwcG9ydC4KKworKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwOCBNYXIgMjAwNDoKKyAgRG9uJ3Qgb3ZlcndyaXRlIHNlcnZlciBJUCBhZGRyZXNzIG9yIGJvb3QgZmlsZSBuYW1lCisgIHdoZW4gdGhlIGJvb3Qgc2VydmVyIGRvZXMgbm90IHJldHVybiB2YWx1ZXMKKworKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCA1IE1hciAyMDA0OgorICBSZW1vdmVkIGNvbXBpbGUgdGltZSByZXN0cmljdGlvbiBvbiBDRkdfSTJDX1NQRUVEIGZvciBEUzEzMzggUlRDCisKKyogUGF0Y2ggYnkgVG9sdW5heSBPcmt1biwgNSBNYXIgMjAwNDoKKyAgRml4IGVhcmx5IGJvYXJkIGluaXRpYWxpemF0aW9uIGZvciBDb2dlbnQgQ1NCMjcyIGJvYXJkCisKKyogUGF0Y2ggYnkgRWQgT2tlcnNvbiwgMyBNYXIgMjAwNDoKKyAgZml4IENGSSBmbGFzaCB3cml0ZXMgZm9yIGxpdHRsZSBlbmRpYW4gc3lzdGVtcworCisqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCAwMSBNYXIgMjAwNDoKKyAgZ2VuZXJhbGl6ZSBVU0IgYW5kIElERSBzdXBwb3J0IGZvciBNUEM1MjAwIHdpdGggYWNjb3JkaW5nCisgIGNoYW5nZXMgdG8gSWNlQ3ViZS5oIGFuZCBUT1A1MjAwLmgKKyAgYWRkIEFtMjlMVjI1NiAyNTYgTUJpdCBGTEFTSCBzdXBwb3J0IGZvciBUT1A1MjAwIGJvYXJkcworICBhZGQgaW5mbyBhYm91dCBVU0IgYW5kIElERSB0byBSRUFETUUKKworKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCA0IE1hciAyMDA0OgorICBGaXggcHJvYmxlbXMgd2l0aCBHQ0MgMy4zLnggd2hpY2ggY2hhbmdlZCBoYW5kbGluZyBvZiBnbG9iYWwKKyAgdmFyaWFibGVzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgdG8gemVybyAobm93IGluIC5ic3MgaW5zdGVhZCBvZgorICAuZGF0YSBhcyBiZWZvcmUpLgorCisqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMDIgTWFyIDIwMDQ6CisgIGFkZCBzdHJzd2FiKCkgdG8gZml4IElERSBMQkEgY2FwYWNpdHksIGZpcm13YXJlIGFuZCBtb2RlbCBudW1iZXJzCisgIG9uIGxpdHRsZSBlbmRpYW4gbWFjaGluZXMKKworKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAwMiBNYXIgMjAwNDoKKyAgLSBSZW1vdmUgZ2V0X3RpY2tzKCkgZnJvbSBORlMgY29kZQorICAtIEFkZCB2ZXJpZmljYXRpb24gb2YgUlBDIHRyYW5zYWN0aW9uIElECisKKyogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDIgTWFyIDIwMDQ6CisgIGNsZWFudXAgZm9yIElERSBhbmQgVVNCIGRyaXZlcnMgZm9yIE1QQzUyMDAKKworKiBQYXRjaCBieSBUcmF2aXMgU2F3eWVyLCAwMSBNYXIgMjAwNDoKKyAgT2NvdGVhOgorICAtIEFkZCBJQk0gUFBDNDQwR1ggUmVmIFBsYXRmb3JtIHN1cHBvcnQgKE9jb3RlYSkKKyAgICBPcmlnaW5hbCBjb2RlIGJ5IFBhdWwgUmV5bm9sZHMgPFBhdWxSZXlub2xkc0BsaHNvbHV0aW9ucy5jb20+CisgICAgQWRhcHRlZCB0byBVLUJvb3QgYW5kIDQ0MEdYIHBvcnQKKyAgNDQwZ3hfZW5ldC5jOgorICAtIEFkZCBncmFjaW91cyBoYW5kbGluZyBvZiBhbGwgRXRoZXJuZXQgUGluIFNlbGVjdGlvbnMgZm9yIDQ0MEdYCisgIC0gQWRkIFJHTUlJIHNlbGVjdGlvbiBmb3IgQ2ljYWRhIENJUzgyMDEgR2lnYWJpdCBQSFkKKyAgcHBjNDQwLmg6CisgIC0gQWRkIG5lZWRlZCBiaXQgZGVmaW5pdGlvbnMKKyAgLSBGaXggZm9ybWF0dGluZworCisqIFBhdGNoIGJ5IENhcmwgUmllY2hlcnMsIDEgTWFyIDIwMDQ6CisgIEFkZCBQUEM0NDBHWCBwcmJkdjAgZGl2aWRlciB0byBmaXggbWVtb3J5IGNsb2NrIGNhbGN1bGF0aW9uLgorCisqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjcgRmViIDIwMDQKKyAgLSBhdm9pZCBwcm9ibGVtcyBmb3IgdGFyZ2V0cyB3aXRob3V0IE5GUyBkb3dubG9hZCBzdXBwb3J0CisKKyogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDI3IEZlYiAyMDA0OgorICAtIEFkZGVkIExCQTQ4IHN1cHBvcnQgKENPTkZJR19MQkE0OCAmIENGR182NEJJVF9MQkEpCisgIC0gQWRkZWQgc3VwcG9ydCBmb3IgNjRiaXQgcHJpbnRpbmcgaW4gdnNwcmludGYgKENGR182NEJJVF9WU1BSSU5URikKKyAgLSBBZGRlZCBzdXBwb3J0IGZvciA2NGJpdCBzdHJ0b3VsIChDRkdfNjRCSVRfU1RSVE9VTCkKKworKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNyBGZWIgMjAwNDoKKyAgRml4IHJhcnBib290OiBhZGQgYXV0b2xvYWQgYnkgTkZTCisKKyogUGF0Y2ggYnkgRGFuIEVpc2VuaHV0LCAyNiBGZWIgMjAwNDoKKyAgZml4IGZsYXNoX3dyaXRlIHJldHVybiB2YWx1ZSBpbiBzYXZlZW52CisKKyogUGF0Y2ggYnkgU3RlcGhhbiBMaW56LCAxMSBEZWMgMjAwMworICBleHBhbmQgY29uZmlnLm1rIHRvIGF2b2lkIHRyaWdyYXBoIHdhcm5pbmdzIG9uIE5JT1MKKworKiBSZW5hbWUgIkJNUzIwMDMiIGJvYXJkIGludG8gIkhNSTEwIgorCisqIFNYMSBwYXRjaGVzOiB1c2UgInNlcmlhbCMiIGZvciBVU0Igc2VyaWFsICM7IHVzZSByZWR1bmRhbmQgZW52aXJvbm1lbnQKKyAgc3RvcmFnZTsgYXV0by1zZXQgY29uc29sZSBvbiBVU0IgcG9ydCAodXNpbmcgcHJlYm9vdCBjb21tYW5kKQorCisqIEFkZCBzdXBwb3J0IGZvciBTWDEgbW9iaWxlIHBob25lOyBhZGQgc3VwcG9ydCBmb3IgVVNCLWJhc2VkIGNvbnNvbGUKKyAgKGVuYWJsZSB3aXRoICJzZXRlbnYgc3Rkb3V0IHVzYnR0eTsgc2V0ZW52IHN0ZGluIHVzYnR0eSIpCisKKyogRml4IExPV0JPT1QgY29uZmlndXJhdGlvbiBmb3IgTVBDNTIwMCB3aXRoIEREUiBtZW1vcnkKKworKiBGaXggU0RSQU0gdGltaW5ncyBmb3IgTElURTUyMDAgLyBJY2VDdWJlIGJvYXJkCisKKyogSGFuZGxlIEF1dGktTURJWCAvIGNvbm5lY3Rpb24gc3RhdHVzIGZvciBJTkNBLUlQCisKKyogRml4IFVTQiBwcm9ibGVtcyB3aGVuIGF0dGVtcHRpbmcgdG8gcmVhZCAwIGJ5dGVzCisKKyogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMjYgRmViIDIwMDQ6CisgIEZpeCBicm9rZW4gY29tcGlsZSBmb3IgWFBFRElURTFLIHRhcmdldC4KKworKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI2IEZlYiAyMDA0OgorICBCdWcgZml4IGZvciBORlMgY29kZSBvbiBOSU9TIHRhcmdldHMKKworKiBQYXRjaCBieSBTdGVwaGVuIFdpbGxpYW1zLCAyNiBGZWIgMjAwNDoKKyAgQnJlYWsgdXAgU3lzdGVtQUNFIHJlYWRzIG9mIGxhcmdlIGJsb2NrIGNvdW50cworCisqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDI2IEZlYiAyMDA0CisgIGFkZCBJREUgc3VwcG9ydCBmb3IgTVBDNTIwMAorCisqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI2IEZlYiAyMDA0OgorICBhZGQgYXV0b2xvYWQgdmlhIE5GUworCisqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMKKyAgVXNlIG9mIENPTkZJR19TRVJJQUxfU09GVFdBUkVfRklGTyBpbiBib2FyZC5jIGNvbnNpc3RlbnQgd2l0aCB1c2VzCisgIGVsc2V3aGVyZSBpbiB0aGUgc291cmNlLgorCisqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDI1IEZlYiAyMDA0OgorICAtIFRpbWVvdXRzIGluIEZQR0EgY29kZSBzaG91bGQgYmUgYmFzZWQgb24gQ0ZHX0haCisgIC0gTWlub3IgY2xlYW51cCBpbiBjb2RlIGZvciBBbHRlcmEgRlBHQSBBQ0VYMUsKKworKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyNSBGZWIgMjAwNDoKKyAgQ2hhbmdlZCAiRGlyZWN0b3J5IEhpZXJhcmNoeSIgc2VjdGlvbiBpbiBSRUFETUUKKworKiBQYXRjaCBieSBNYXNhbWkgS29taXlhLCAyNSBGZWIgMjAwNDoKKyAgUmVkdWNlIGNvcHkgY291bnQgaW4gbmZzX3JlYWRfcmVwbHkoKSBvZiBORlMgY29kZQorCisqIFBhdGNoIGJ5IE1hcmt1cyBQaWV0cmVrLCAyNCBGZWIgMjAwNDoKKyAgTlM5NzUwIERldkJvYXJkIGFkZGVkCisKKyogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjQgRmViIDIwMDQKKyAgYWRkIFVTQiBzdXBwb3J0IGZvciBNUEM1MjAwCisKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjQgRmViIDIwMDQ6CisgIC0gZml4IE1JSSBjb21tYW5kcyB0byB1c2UgdmFsdWVzIGZyb20gbGFzdCBjb21tYW5kCisKKyogUGF0Y2ggYnkgVG9yc3RlbiBEZW1rZSwgMjQgRmViIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciB0aGUgZVhhbGlvbiBwbGF0Zm9ybSAoU1BTVy04MjQwLCBGLTMwLCBGLTMwMCkKKworKiBQYXRjaCBieSBSYWh1bCBTaGFuYmhhZywgMTkgRmViIDIwMDQ6CisgIEZpeGVzIGZvciBmb3IgT01BUDE2MTAgYm9hcmQ6CisgIC0gc2hpZnQgc29tZSBJUlEgc3BlY2lmaWMgY29kZSB0byBwbGF0Zm9ybS5TIGZpbGUKKyAgLSByZW1vdmUgZHVwbGljYXRld2F0Y2hkb2cgcmVzZXQgY29kZSBmcm9tIHN0YXJ0LlMKKworKiBNYWtlIEF1dG8tTURJWCBTdXBwb3J0IGNvbmZpZ3VyYWJsZSBvbiBJTkNBLUlQIGJvYXJkCisKKyogRml4IGxpY2Vuc2UgZm9yIG1raW1hZ2UgdG9vbAorCisqIFBhdGNoIGJ5IE1hc2FtaSBLb21peWEsIDI0IEZlYiAyMDA0OgorICBVcGRhdGUgTmV0Qm9vdEZpbGVYZmVyU2l6ZSBpbiBORlMgY29kZQorCisqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjQgRmViIDIwMDQ6CisgIGZpeCBwYWNrZXQgbGVuZ3RoIGluIE5GUyBjb2RlCisKKyogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5LCAyMiBGZWIgMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIE5GUyBmb3IgZmlsZSBkb3dubG9hZAorCisqIFBhdGNoIGJ5IEFuZHJlYSBTY2lhbiwgMTcgRmViIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBTM0M0NEIwIHByb2Nlc3NvciBhbmQgREFWRSBCMiBib2FyZAorCisqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIwIEZlYiAyMDA0OgorICAtIEFkZCBzdXBwb3J0IGZvciBNSUkgY29tbWFuZHMgb24gQVQ5MVJNOTIwMCBib2FyZHMKKyAgLSBzb21lIGNsZWFudXAgaW4gQVQ5MVJNOTIwMCBldGhlcm5ldCBjb2RlCisKKyogUGF0Y2ggYnkgUGV0ZXIgUnlzZXIsIDIwIEZlYiAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgdGhlIFhpbGlueCBNTDMwMCBwbGF0Zm9ybQorCisqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMTcgRmViIDIwMDQ6CisgIEZpeCB3YXRjaGRvZyBzdXBwb3J0IGZvciBOSU9TCisKKyogUGF0Y2ggYnkgSm9zaCBGcnltYW4sIDE2IEZlYiAyMDA0OgorICBGaXggYnl0ZS1zd2FwcGluZyBmb3IgY2ZpX2ZsYXNoLmMgZm9yIGRpZmZlcmVudCBidXMgd2lkdGhzCisKKyogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE0IEplYiAyMDA0OgorICBSZW1vdmUgZHVwbGljYXRlICJGUEdBIFN1cHBvcnQiIG5vdGVzIGZyb20gdGhlIFJFQURNRSBmaWxlCisKKyogUGF0Y2hlcyBieSBSZWluaGFyZCBNZXllciwgMTQgRmViIDIwMDQ6CisgIC0gdXBkYXRlIGJvYXJkL2VtayB0cmVlOyB1c2UgY29tbW9uIGZsYXNoIGRyaXZlcgorICAtIENvcnJlY3RlZCB0ZXN0ZWQgYml0cyBpbiBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbiBpbiBjcHUvbXBjNXh4eC90cmFwcy5jCisgICAgW2FkYXB0ZWQgZm9yIG90aGVyIFBQQyBDUFVzIC0tIHdkXQorICAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBNNDhUMDggb24gdGhlIEVWQUw1MjAwIGJvYXJkIGluIHJ0Yy9tazQ4dDU5LmMKKworKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTMgRmViIDIwMDQ6CisgIENhbGwgc2hvd19ib290X3Byb2dyZXNzKCkgd2hlbmV2ZXIgUE9TVCAiRkFJTEVEIiBpcyBwcmludGVkLgorCisqIFBhdGNoIGJ5IE5pc2hhbnQgS2FtYXQsIDEzIEZlYiAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgVEkgT01BUDE2MTAgSDIgQm9hcmQKKyAgRml4ZXMgZm9yIGNwdS9hcm05MjZlanMvaW50ZXJydXB0LmMKKwkoYmFzZWQgb24gUmljaGFyZCBXb29kcnVmZidzIHBhdGNoIGZvciBhcm05MjUsIDE2IE9jdCAwMykKKyAgRml4IGZvciBhIHRpbWVyIGJ1ZyBpbiBPTUFQMTYxMCBJbm5vdmF0b3IKKyAgQWRkIHN1cHBvcnQgZm9yIENTMCAoUk9NKS9DUzMgKEZsYXNoKSBib290IGluIE9NQVAxNjEwIElubm92YXRvciBhbmQgSDIKKworKiBQYXRjaGVzIGJ5IFN0ZXBoYW4gTGlueiwgMTIgRmViIDIwMDQ6CisgIC0gYWRkIHN1cHBvcnQgZm9yIE5JT1MgdGltZXIgd2l0aCB2YXJpYWJsZSBwZXJpb2QgcHJlbG9hZCBjb3VudGVyIHZhbHVlCisgIC0gcHJlcGFyZSBQT1NUIGZyYW1ld29yayBzdXBwb3J0IGZvciBOSU9TIHRhcmdldHMKKworKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTEgRmViIDIwMDQ6CisgIGFkZCBQT1NUIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDUgYm9hcmQKKworKiBQYXRjaCBieSBMYXVyZW50IE1vaGluLCAxMCBGZWIgMjAwNDoKKyAgRml4IGJ1ZmZlciBvdmVyZmxvdyBpbiBjb21tb24vdXNiLmMKKworKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxMCBGZWIgMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIENvZ2VudCBDU0IyNzIgYm9hcmQKKworKiBQYXRjaCBieSBUaG9tYXMgRWxzdGUsIDEwIEZlYiAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgTkVUKzUwIENQVSBhbmQgTW9kTkVUNTAgYm9hcmQKKworKiBQYXRjaCBieSBTYW0gU29uZywgMTAgRmViIDIwMDQ6CisgIEZpeCB0eXBvcyBpbiBjZmlfZmxhc2guYworCisqIFBhdGNoIGJ5IExlb24gS3Vrb3ZlYywgMTAgRmViIDIwMDQKKyAgRml4ZWQgbG9uZyBkaXIgZW50cnkgc2xvdCBpZCBjYWxjdWxhdGlvbiBpbiBnZXRfdmZhdG5hbWUKKworKiBQYXRjaCBieSBSb2JpbiBHaWxrcywgMTAgRmViIDIwMDQ6CisgIGFkZCAiaXRlc3QiIGNvbW1hbmQgKG9wZXJhdG9yczogLWVxLCAtbmUsIC1sdCwgLWd0LCAtbGUsIC1nZSwgPT0sCisgICE9LCA8PiwgPCwgPiwgPD0sID49KQorCisqIEZpeCBwcm9ibGVtIHdpdGggc2lkZSBlZmZlY3RzIGluIG1hY3JvcyBpbiBpbmNsdWRlL3VzYi5oCisKKyogUGF0Y2ggYnkgRGF2aWQgQmVuc29uLCAxMyBOb3YgMjAwMzoKKyAgYnVnIDg0MTM1OCAtIGZpeCBURlRQIGRvd25sb2FkIHNpemUgbGltaXQKKworKiBGaXhpbmcgYnVnIDg1MDc2ODoKKyAgaW1wcm9wZXIgZmx1c2hfY2FjaGUoKSBpbiBsb2FkX3NlcmlhbCgpCisKKyogRml4aW5nIGJ1ZyA4MzQ5NDM6CisgIE1QQzg1NDAgLSBtaXNzaW5nIHZvbGF0aWxlIGRlY2xhcmF0aW9ucworCisqIFBhdGNoIGJ5IFN0ZXBoZW4gV2lsbGlhbXMsIDA5IEZlYiAyMDA0OgorICBBZGQgc3VwcG9ydCBmb3IgWGlsaW54IFN5c3RlbUFDRSBjaGlwOgorICAtIE5ldyBmaWxlcyBjb21tb24vY21kX2FjZS5jIGFuZCBpbmNsdWRlL3N5c3RlbWFjZS5oCisgIC0gSG9vayBzeXN0ZW1hY2Ugc3VwcG9ydCBpbnRvIGNtZF9mYXQgYW5kIHRoZSBwYXJ0aXRpb24gbWFuYWdlcgorCisqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA5IEZlYiAyMDA0OgorICBBZGQgYmlfb3BiZnJlcSAmIGJpX2lpY19mYXN0IHRvIDQ0MEdYIGJkX2luZm8gYXMgbmVlZGVkIGZvciBMaW51eAorCisqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDA5IEZlYiAyMDA0OgorICBvIDQ0MEdYOgorICAgIC0gRml4IFBDSSBJbmRpcmVjdCBhY2Nlc3MgZm9yIHR5cGUgMSBjb25maWcgY3ljbGVzIHdpdGggcHBjNDQwLgorICAgIC0gQWRkIHBoeW1vZGUgZm9yIDQ0MCBlbmV0CisgICAgLSBmaXggcGNpIHByZSBpbml0CisgIG8gWFBlZGl0ZTFLOgorICAgIC0gQ2hhbmdlIGJvYXJkX3ByZV9pbml0IHRvIGJvYXJkX2Vhcmx5X2luaXRfZgorICAgIC0gQWRkIHVzZXIgZmxhc2ggdG8gYnVzIGNvbnRyb2xsZXIgc2V0dXAKKyAgICAtIEZpeCBwY2kgcHJlIGluaXQKKyAgICAtIEZpeCBpc19wY2lfaG9zdCB0byBjaGVjayBHUElPIGZvciBtb25hcmNoIGJpdAorICAgIC0gRm9yY2UgeHBlZGl0ZTFrIHRvIHBjaSBjb252ZW50aW9uYWwgbW9kZSAodmlhICNkZWZpbmUgb3B0aW9uKQorCisqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgNCBGZWIgMjAwNDoKKyAgLSBoYW5kbGUgdGhlIG1hY2hpbmUgY2hlY2sgdGhhdCBpcyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBQQ0kgc2NhbnMKKyAgICBvbiA4Mnh4IHByb2Nlc3NvcnMuCisgIC0gZGVmaW5lIHRoZSByZWdpc3RlcnMgdXNlZCBpbiB0aGUgSU1NUiBieSB0aGUgUENJIHN1YnN5c3RlbS4KKworKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwMyBGZWIgMjAwNDoKKyAgY3B1L21wYzV4eHgvc3RhcnQuUzogY29weSBNQkFSIGludG8gU1BSMzExCisKKyogUGF0Y2ggYnkgSmVmZiBBbmdpZWxza2ksIDAzIEZlYiAyMDA0OgorICBGaXggY29weSAmIHBhc3RlIGVycm9yIGluIGNwdS9tcGM4MjYwL3BjaS5jCisKKyogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDI0IEphbiAyMDA0OgorICBGaXggdHlwbyBpbiBjcHUvbXBjNXh4eC9wY2lfbXBjNTIwMC5jCisKKyogQWRkIEF1dG8tTURJWCBzdXBwb3J0IGZvciBJTkNBLUlQCisKKyogU29tZSBjb2RlIGNsZWFudXAKKworKiBQYXRjaCBieSBKb3NlZiBCYXVtZ2FydG5lciwgMTAgRmViIDIwMDQ6CisgIEZpeGVzIGZvciBDb2xkRmlyZSBwb3J0CisKKyogUGF0Y2ggYnkgQnJhZCBLZW1wLCAxMSBGZWIgMjAwNDoKKyAgRml4IENGSSBmbGFzaCBkcml2ZXIgcHJvYmxlbXMKKworKiBNYWtlIHN1cmUgdG8gdXNlIGEgYnVzIGNsb2NrIGRpdmlkZXIgb2YgMiBvbmx5IHdoZW4gcnVubmluZyBUUU04eHhNCisgIG1vZHVsZXMgYXQgQ1BVIGNsb2NrIGZyZXF1ZW5jaWVzIGFib3ZlIDY2IE1Iei4KKworKiBPcHRpbWl6ZSBmbGFzaCBwcm9ncmFtbWluZyBzcGVlZCBmb3IgTFdNT04gKGJ5IGFub3RoZXIgMTAwJSA6LSkKKworKiBQYXRjaCBieSBKaWFuIFpoYW5nLCAzIEZlYiAyMDA0OgorICAtIENoYW5nZWQgdGhlIGluY29ycmVjdCBGQVQxMkJVRlNJWkUKKyAgLSBkYXRhX2JlZ2luIGluIGZzZGF0YSBjYW4gYmUgbmVnYXRpdmUuIENoYW5nZWQgaXQgdG8gYmUgc2hvcnQuCisKKyogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDMwIEphbiAyMDA0OgorICAxOiAtIGJvYXJkL2FsdGVyYS9jb21tb24vZmxhc2guYzpmbGFzaF9lcmFzZSgpOgorICAgICAgIG8gYWxsb3cgaW50ZXJydXB0cyBiZWZvciBnZXRfdGltZXIoKSBjYWxsCisgICAgICAgbyBjaGVjay11cCBlYWNoIGVyYXNlZCBzZWN0b3IgYW5kIGF2b2lkIHVuZXhwZWN0ZWQgdGltZW91dHMKKyAgICAgLSBib2FyZC9hbHRlcmEvZGsxYzIwL2RrMXMxMC5jOmJvYXJkX2Vhcmx5X2luaXRfZigpOgorICAgICAgIG8gZW5jbG9zZSBzZXZlbnNlZ19zZXQoKSBpbiBjcHAgY29uZGl0aW9uCisgICAgIC0gcmVtb3ZlIHRoZSBBU01JIGNvbmZpZ3VyYXRpb24gZm9yIERLMVMxMF9zdGFuZGFyZF8zMiAobmV2ZXIgcHJlc2VudCkKKyAgICAgLSBmaXggc29tZSB0eXBlZCBpbiBtaXN0YWtlcyBpbiB0aGUgTklPUyBkb2N1bWVudGF0aW9uCisgIDI6IC0gc3BsaXQgREsxQzIwIGNvbmZpZ3VyYXRpb24gaW50byBzZXZlcmFsIGhlYWRlciBmaWxlczoKKyAgICAgICBvIHR3byBuZXcgZmlsZXMgZm9yIGVhY2ggTklPUyBDUFUgZGVzY3JpcHRpb24KKyAgICAgICBvIFUtQm9vdCByZWxhdGVkIHBhcnQgaXMgcmVtYWluaW5nIGluIERLMUMyMC5oCisgIDM6IC0gc3BsaXQgREsxUzEwIGNvbmZpZ3VyYXRpb24gaW50byBzZXZlcmFsIGhlYWRlciBmaWxlczoKKyAgICAgICBvIHR3byBuZXcgZmlsZXMgZm9yIGVhY2ggTklPUyBDUFUgZGVzY3JpcHRpb24KKyAgICAgICBvIFUtQm9vdCByZWxhdGVkIHBhcnQgaXMgcmVtYWluaW5nIGluIERLMVMxMC5oCisgIDQ6IC0gQWRkIHN1cHBvcnQgZm9yIHRoZSBNaWNyb3Ryb25peCBMaW51eCBEZXZlbG9wbWVudCBLaXQKKyAgICAgICBOSU9TIENQVSBjb25maWd1cmF0aW9uIGF0IHRoZSBBbHRlcmEgTmlvcyBEZXZlbG9wbWVudCBLaXQsCisgICAgICAgU3RyYXRpeCBFZGl0aW9uIChESy0xUzEwKQorICA1OiAtIEFkZCBkb2N1bWVudGF0aW9uIGZvciB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAorICAgICAgIFN0cmF0aXggRWRpdGlvbiAoREstMVMxMCkKKyAgNjogLSBBZGQgc3VwcG9ydCBmb3IgdGhlIE5pb3MgU2VyaWFsIFBlcmlwaGFyZWwgSW50ZXJmYWNlIChTUEkpCisgICAgICAgKG1hc3RlciBvbmx5KQorICA3OiAtIEFkZCBzdXBwb3J0IGZvciB0aGUgY29tbW9uIFUtQm9vdCBTUEkgZnJhbWV3b3JrIGF0CisgICAgICAgUlRDIGRyaXZlciBEUzEzMDYKKworKiBQYXRjaCBieSBSYWh1bCBTaGFuYmhhZywgMjggSmFuIDIwMDQ6CisgIEZpeCBmbGFzaCBwcm90ZWN0aW9uL2xvY2tpbmcgaGFuZGxpbmcgZm9yIE9NQVAxNjEwIGlubm92YXRvciBib2FyZC4KKworKiBQYXRjaCBieSBSb2xmIFBldWtlcnQsIDI4IEphbiAyMDA0OgorICBmaXggZmxhc2ggd3JpdGUgcHJvYmxlbXMgb24gQ1NCMjI2IGJvYXJkICh3cml0ZSB3aXRoIDMyIGJpdCBidXMgd2lkdGgpCisKKyogUGF0Y2hlcyBieSBNYXJrIEpvbmFzLCAxNiBKYW4gMjAwNDoKKyAgLSBmaXggcm91bmRpbmcgZXJyb3Igd2hlbiBjYWxjdWxhdGluZyBiYXVkcmF0ZXMgZm9yIE1QQzUyMDAgUFNDcworICAtIG1ha2Ugc3VyZSBDRkdfUkFNQk9PVCBhbmQgQ0ZHX0xPV0JPT1QgYXJlIG5vdCBlbmFibGVkIGF0IHRoZSBzYW1lCisgICAgdGltZSB3aGljaCBpcyBub3Qgc3VwcG9ydGVkCisKKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjYgSmFuIDIwMDQ6CisgIEFsbG93IGJ6aXAyIGNvbXByZXNzaW9uIGZvciBzbWFsbCBtZW1vcnkgZm9vdHByaW50IGJvYXJkcworCisqIFBhdGNoIGJ5IEJyYWQgS2VtcCwgMjEgSmFuIDIwMDQ6CisgIEFkZCBzdXBwb3J0IGZvciBDRkkgZmxhc2ggZHJpdmVyIGZvciBib3RoIHRoZSBJbnRlbCBhbmQgdGhlIEFNRAorICBjb21tYW5kIHNldHMuCisKKyogUGF0Y2ggYnkgVHJhdmlzIFNhd3llciwgMjAgSmFuIDIwMDQ6CisgIEZpeCBwY2kgYnJpZGdlIGF1dG8gZW51bWVyYXRpb24gb2Ygc2libGluZyBwMnAgYnJpZGdlcy4KKworKiBQYXRjaCBieSBUb2x1bmF5IE9ya3VuLCAxMiBKYW4gMjAwNDoKKyAgQWRkIHNvbWUgZGVsYXlzIGFzIG5lZWRlZCBmb3IgSW50ZWwgTFhUOTcxQSBQSFkgc3VwcG9ydAorCisqIFBhdGNoZXMgYnkgU3RlcGhhbiBMaW56LCAwOSBKYW4gMjAwNDoKKyAgLSBhdm9pZCB3YXJuaW5nOiB1bnVzZWQgdmFyaWFibGUgYHBpb3AnIGluIGJvYXJkL2FsdGVyYS9jb21tb24vc2V2ZW5zZWcuYworICAtIG1ha2UgREsxQzIwIGJvYXJkIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBBU01JIGNvbmZvcm0gdG8KKyAgICBkb2N1bWVudGF0aW9uCisKKyogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDkgSmFuIDIwMDQ6CisKKyAgQVJNIG1lbW9yeSBsYXlvdXQgZml4ZXM6IHRoZSBhYm9ydC1zdGFjayBpcyBub3cgc2V0IHVwIGluIHRoZQorICBjb3JyZWN0IFJBTSBhcmVhLCBhbmQgdGhlIEJTUyBpcyB6ZXJvZWQgb3V0IGFzIGl0IHNob3VsZCBiZS4KKworICBGdXJ0aGVybW9yZSwgdGhlIG1hZ2ljIHZhcmlhYmxlcyAnYXJtYm9vdF9lbmQnIGFuZCAnYXJtYm9vdF9lbmRfZGF0YScKKyAgb2YgdGhlIGxpbmtlciBzY3JpcHRzIGFyZSByZXBsYWNlZCBieSAnX19ic3Nfc3RhcnQnIGFuZCAnX2VuZCcsCisgIHJlc3AuLCB3aGljaCBpcyBhIGZ1cnRoZXIgc3RlcCB0byBlbGltaW5hdGUgdW5uZWNlc3NhcnkgZGlmZmVyZW5jZXMKKyAgYmV0d2VlbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIENQVSBhcmNoaXRlY3R1cmVzLgorCisqIFBhdGNoIGJ5IGxpYW5nIGEgbGVpLCA5IEphbiAyMDA0OgorICBGaXggSW50ZWwgMjhGMTI4SjMgSUQgaW4gaW5jbHVkZS9mbGFzaC5oCisKKyogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDkgSmFuIDIwMDQ6CisgIGFkZCBzdXBwb3J0IGZvciBUQjAyMjkgYm9hcmQgKE5FQyBWUjQxMzEgTUlQUyBwcm9jZXNzb3IpCisKKyogUGF0Y2ggYnkgTGVvbiBLdWtvdmVjLCAxMiBEZWMgMjAwMzoKKyAgY2hhbmdlZCBleHRlcm4gX19pbmxpbmVfXyBpbnRvIHN0YXRpYyBfX2lubGluZV9fIGluCisgIGluY2x1ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaAorCisqIFBhdGNoIGJ5IFRyYXZpcyBTYXd5ZXIsIDMwIERlYyAyMDAzOgorICBBZGQgc3VwcG9ydCBmb3IgSUJNIFBQQzQ0MEdYLiBNdWx0aXBsZSBFTUFDIEV0aGVybmV0IGRldmljZXMsCisgIHNlbGVjdCBNREkgcG9ydCBiYXNlZCBvbiBlbmFibGVkIEVNQUMgZGV2aWNlLgorICBBZGQgc3VwcG9ydCBmb3IgWEVTIEluYyA8aHR0cDovL3d3dy54ZXMtaW5jLmNvbT4gWFBlZGl0ZTEwMDAgNDQwR1gKKyAgYmFzZSBQclBNQyBib2FyZC4KKworKiBQYXRjaCBieSBXb2x0ZXIgS2FtcGh1aXMsIDE1IERlYyAyMDAzOgorICBtYWRlIENPTkZJR19TSUxFTlRfQ09OU09MRSB1c2FibGUgb24gYWxsIGFyY2hpdGVjdHVyZXMKKworKiBEaXNhYmxlIGRhdGUgY29tbWFuZCBvbiBUUU04NjZNIC0gdGhlcmUgaXMgbm8gUlRDIG9uIE1QQzg2NgorCisqIEZpeCB2YXJpYWJsZSBDUFUgY2xvY2sgZm9yIE1QQzg1OS84NjYgc3lzdGVtcyBmb3IgbG93IENQVSBjbG9ja3MKKworKiBJbXBsZW1lbnQgYWRhcHRpdmUgU0RSQU0gdGltaW5nIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gYWN0dWFsIENQVQorICBjbG9jayBmcmVxdWVuY3kgZm9yIElOQ0EtSVA7IGZpeCBwcm9ibGVtIHdpdGggYm9hcmQgaGFuZ2luZyB3aGVuCisgIHN3aXRjaGluZyBmcm9tIDE1ME1IeiB0byAxMDBNSHoKKworKiBBZGQgUENNQ0lBIENTIHN1cHBvcnQgZm9yIEJNUzIwMDMgYm9hcmQKKworKiBBZGQgdmFyaWFibGUgQ1BVIGNsb2NrIGZvciBNUEM4NTkvODY2IHN5c3RlbXMgKHNvIGZhciBvbmx5IFRRTTg2Nk0pOgorICBzZWUgZG9jL1JFQURNRS5NUEM4NjYgZm9yIGRldGFpbHM7CisgIGltcGxlbWVudCB3b3JrYXJvdW5kIGZvciAiU0lVNCIgYW5kICJTSVU5IiBzaWxpY29uIGJ1Z3Mgb24gTVBDODY2OworICBjYWxjdWxhdGUgQ1BVIGNsb2NrIGZyZXF1ZW5jeSBmcm9tIFBMTCByZWdpc3RlciB2YWx1ZXMuCisKKyogQWRkIHN1cHBvcnQgZm9yIDEyOCBNQiBSQU0gb24gVFFNOHh4TC9NIG1vZHVsZXMKKworKiBGaXggUFMvMiBrZXlib2FyZCBwcm9ibGVtIGNhdXNlZCBieSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHZhcmlhYmxlCisgIHBvaW50aW5nIHRvIGEgbG9jYXRpb24gaW4gZmxhc2gKKworKiBGaXggSU5DQS1JUCBjbG9jayBjYWxjdWxhdGlvbjogNDAwLzMgPSAxMzMuMyBNSHosIG5vdCAxMzAuCisKKyogVGhlIFBTLzIgbXV4IG9uIHRoZSBCTVMyMDAzIGJvYXJkIG5lZWRzIDQ1MCBtcyBhZnRlciBwb3dlciBvbgorICBiZWZvcmUgd2UgY2FuIGFjY2VzcyBpdDsgYWRkIGRlbGF5IGluIGNhc2Ugd2UgYXJlIGZhc3RlciAod2l0aCBubworICBDRiBjYXJkIGluc2VydGVkKQorCisqIENsZWFudXAgb2Ygc29tZSBpbml0IGZ1bmN0aW9ucworCisqIE1ha2Ugc3VyZSBTQ0MgRXRoZXJuZXQgaXMgYWx3YXlzIHN0b3BwZWQgYnkgdGhlIHRpbWUgd2UgYm9vdCBMaW51eAorICB0byBhdm9pZCBMaW51eCBjcmFzaGVzIGJ5IGVhcmx5IHBhY2tldHMgY29taW5nIGluLgorCisqIEFjY2VsZXJhdGUgZmxhc2ggYWNjZXNzZXMgb24gTFdNT04gYm9hcmQgYnkgdXNpbmcgYnVmZmVyZWQgd3JpdGVzCisKKyogRml4IHR5cG8gaW4gTWFrZWZpbGU7CisgIGZpeCBwcm9ibGVtIHdpdGggUEFSVE5VTSBkZXRlY3Rpb24KKworKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMDkgSmFuIDIwMDQ6CisgIC0gYWRkIFJUQyBzdXBwb3J0IGZvciBNUEM1MjAwIGJhc2VkIGJvYXJkcyAocmVxdWlyZXMgUlRDX1hUQUwpCisKKyogQWRkIHN1cHBvcnQgZm9yIElERSBMRUQgb24gQk1TMjAwMyBib2FyZAorICAoZXhjbHVzaXZlIHdpdGggc3RhdHVzIExFRCEpCisKKyogQWRkIHN1cHBvcnQgZm9yIFBTLzIga2V5Ym9hcmQgKHVzZWQgd2l0aCBQUy8yIG11bHRpcGxleG9yIG9uCisgIEJNUzIwMDMgYm9hcmQpCisKKyogUGF0Y2hlcyBieSBSZWluaGFyZCBNZXllciwgNCBKYW4gMjAwNCArIDcgSmFuIDIwMDQ6CisgIEFkZCBjb21tb24gZmlsZXMgZm9yICJlbWsiIGJvYXJkcworCisqIEFkZCBhIGNvbW1vbiBnZXRfcmFtX3NpemUoKSBmdW5jdGlvbiBhbmQgbW9kaWZ5IHRoZSB0aGUKKyAgYm9hcmQtc3BlY2lmaWMgZmlsZXMgdG8gaW52b2tlIHRoYXQgY29tbW9uIGltcGxlbWVudGF0aW9uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMS4wLjE6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogU2V0IGRlZmF1bHQgY2xvY2sgZm9yIElOQ0EtSVAgdG8gMTUwIE1IegorCisqIE1ha2UgQk1TMjAwMyB1c2UgYSBzZXBhcmF0ZSBjb25maWcgZmlsZSB0byBhdm9pZCAjaWZkZWYgbWVzczsKKyAgYWRkIEkyQyBzdXBwb3J0OyBhZGQgc3VwcG9ydCBmb3IgRFMxMzM3IFJUQworCisqIEFkZCBDb21wYWN0Rmxhc2ggc3VwcG9ydCAgZm9yIEJNUzIwMDMgYm9hcmQKKworKiBBZGQgc3VwcG9ydCBmb3Igc3RhdHVzIExFRCBvbiBCTVMyMDAzIGJvYXJkCisKKyogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwMiBKYW4gMjAwNDoKKyAgQWRkIHN1cHBvcnQgZm9yIHRoZSBOaW9zIEFjdGl2ZSBTZXJpYWwgTWVtb3J5IEludGVyZmFjZSAoQVNNSSkKKyAgb24gQ3ljbG9uZSBkZXZpY2VzCisKKyogUGF0Y2ggYnkgQW5kcmVhIE1hcnNvbiwgMTYgRGVjIDIwMDM6CisgIEFkZCBzdXBwb3J0IGZvciB0aGUgUFBDaGFtZWxlb24gTUUgYW5kIEhJIG1vZHVsZXMKKworKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyMiBEZWMgMjAwMzoKKyAgQWRkIHN1cHBvcnQgZm9yIE1vdG9yb2xhIERVRVQgQURTIGJvYXJkIChNUEM4N3gvODh4KQorCisqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTUgRGVjIDIwMDM6CisgIGFkZCBzdXBwb3J0IGZvciBjcmFtZnMgKHVzZXMgSkZGUzIgY29tbWFuZCBpbnRlcmZhY2UpCisKKyogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDExIERlYyAyMDAzOgorICAtIG1vcmUgZG9jdW1lbnRhdGlvbiBmb3IgTklPUyBwb3J0CisgIC0gbmV3IHN0cnVjdCBuaW9zX3Bpb190LCBzdHJ1Y3Qgbmlvc19zcGlfdAorICAtIFJlY29uZmlndXJhdGlvbiBmb3IgTklPUyBEZXZlbG9wbWVudCBLaXQgREsxQzIwOgorICAgIG8gbW92ZSBib2FyZCByZWxhdGVkIGNvZGUgZnJvbSBib2FyZC9kazFjMjAKKyAgICAgIHRvIGJvYXJkL2FsdGVyYS9kazFjMjAKKyAgICBvIGNyZWF0ZSBhIG5ldyBjb21tb24gc291cmNlIHBhdGggYm9hcmQvYWx0ZXJhL2NvbW1vbgorICAgICAgYW5kIG1vdmUgZ2VuZXJpYyBmbGFzaCBhY2Nlc3Mgc3R1ZmYgaW50byBpdAorICAgIG8gY2hhbmdlL2V4cGFuZCBjb25maWd1cmF0aW9uIGZpbGUgREsxQzIwLmgKKyAgLSBBZGQgc3VwcG9ydCBmb3IgTklPUyBEZXZlbG9wbWVudCBLaXQgREsxUzEwCisgIC0gQWRkIHN0YXR1cyBMRUQgc3VwcG9ydCBmb3IgTklPUyBzeXN0ZW1zCisgIC0gQWRkIGR1YWwgNy1zZWdtZW50IExFRCBzdXBwb3J0IGZvciBBbHRlcmEgTklPUyBEZXZLaXRzCisKKyogUGF0Y2ggYnkgUm9uZW4gU2hpdHJpdCwgMTAgRGVjIDIwMDM6CisgIEFkZCBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCBEQjY0MzYwIC8gREI2NDQ2MCBkZXZlbG9wbWVudCBib2FyZHMKKworKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxMCBEZWMgMjAwMzoKKyAgZml4IGRlcGVuZGVuY3kgcHJvYmxlbSBpbiBleGFtcGxlcy9NYWtlZmlsZQorCisqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCA4IERlYyAyMDAzCisgIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBQQVRJIGJvYXJkIChNUEM1NTUpCisgIC0gYWRkIFNQSSBzdXBwb3J0IGZvciB0aGUgTVBDNXh4CisKKyogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMDggRGVjIDIwMDM6CisgIGFkZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgQ09ORklHX1NFUklBTF9UQUcgYW5kIENPTkZJR19SRVZJU0lPTl9UQUcKKyAgdG8gcGFzcyBBVEFHX1NFUklBTCBhbmQgQVRBR19SRVZJU0lPTiwgcmVzcC4sIHRvIHRoZSBBUk0gdGFyZ2V0OworICBjbGVhbnVwIHNvbWUgcmVkdW5kYW5kICNkZWZpbmVzCisKKyogUGF0Y2ggYnkgQW5kcukgU2Nod2FyeiwgOCBEZWMgMjAwMzoKKyAgZml4ZXMgZm9yIERhdmljb20gRE05MTAyQSBFdGhlcm5ldCBDaGlwICgjZGVmaW5lIENPTkZJR19UVUxJUF9GSVhfREFWSUNPTSk6CisgIC0gVFggYW5kIFJYIGRlc2tyaXB0b3JzIG11c3QgYmUgcXVhZC13b3JkIGFsaWduZWQKKyAgLSBkb2VzIG5vdCB3b3JrIHdpdGggb25seSBvbmUgVFggZGVza3JpcHRvcgorICAtIHN0YW5kYXJkIHJlc2V0IG1ldGhvZCBkb2VzIG5vdCB3b3JrCisKKyogUGF0Y2ggYnkgTWFzYW1pIEtvbWl5YSwgMDggRGVjIDIwMDM6CisgIGFkZCBSVEw4MTM5IGV0aGVybmV0IGRyaXZlcgorCisqIFBhdGNoZXMgYnkgRWQgT2tlcnNvbiwgMDcgRGVjIDIwMDM6CisgIC0gZml4IGV0aGVybmV0IGZvciB0aGUgQVUxeDAwIHByb2Nlc3NvcnMgaW4gbGl0dGxlLWVuZGlhbiBtb2RlLgorICAtIGV4dGVuZCBtZW1zZXR1cC5TIGZvciB0aGUgQVUxeDAwIHByb2Nlc3NvcnMgaW4gQkUgYW5kIExFIG1vZGVzCisKKyogTWlub3IgY29kZSBjbGVhbnVwIChjb2Rpbmcgc3R5bGUpCisKKyogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDMwIERlYyAyMDAzOgorICAtIGNwdS9tcGM1eHh4L2ZlYy5jOiBhZGRlZCBDT05GSUdfUEhZX0FERFIsIGFkZGVkIENPTkZJR19QSFlfVFlQRSwKKyAgLSBhZGRlZCBDT05GSUdfUEhZX0FERFIgdG8gaW5jbHVkZS9jb25maWdzL0ljZUN1YmUuaCwKKyAgLSB0dXJuZWQgZGVidWcgcHJpbnQgb2YgUEhZIHJlZ2lzdGVycyBpbnRvIGEgZnVuY3Rpb24gKGNhbGxlZCBpbiB0d28gcGxhY2VzKQorICAtIGFkZGVkIHN1cHBvcnQgZm9yIEVNSyBNUEM1MjAwIGJhc2VkIG1vZHVsZXMKKworKiBGaXggTVBDOHh4IFBMUFJDUl9NRkRfU0hJRlQgdHlwbworCisqIEFkZCBzdXBwb3J0IGZvciBUUU04NjZNIG1vZHVsZXMKKworKiBGaXhlcyBmb3IgVFFNODU1TSB3aXRoIDQgTUIgZmxhc2ggKEFtMjlETDE2MyA9IF9ub18gbWlycm9yIGJpdCBmbGFzaCkKKworKiBGaXggYSBmZXcgY29tcGlsZXIgd2FybmluZ3MKKworKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMjggRGVjIDIwMDM6CisgIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIFRPUDUyMDAgYm9hcmQKKworKiBNYWtlIENQVSBjbG9jayBvbiBJQ0EtSVAgYm9hcmQgY29udHJvbGxhYmxlIGJ5IGEgImNwdWNsayIKKyAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hpY2ggY2FuIHNldCB0byAiMTAwIiwgIjEzMyIsIG9yICIxNTAiLiBUaGUKKyAgQ1BVIGNsb2NrIHdpbGwgYmUgY29uZmlndXJlZCBhY2NvcmRpbmdseSB1cG9uIG5leHQgcmVib290LiBPdGhlcgorICB2YWx1ZXMgYXJlIGlnbm9yZWQuIEluIGNhc2Ugb2YgYW4gaW52YWxpZCBvciB1bmRlZmluZWQgImNwdWNsayIKKyAgdmFsdWUsIHRoZSBjb21waWxlLXRpbWUgZGVmYXVsdCBDUFUgY2xvY2sgc3BlZWQgd2lsbCBiZSB1c2VkLgorCisqIEVuYWJsZSBRdWFkLVVBUlQgb24gQk1TMjAwMyBib2FyZCAoaW5pdGlhbGl6ZSB0aGUgUENNQ0lBIG1lbW9yeQorICB3aW5kb3cgdGhhdCBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgVUFSVCByZWdpc3RlcnMgYnkgdGhlIExpbnV4IGRyaXZlcikKKworKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMjAgRGVjIDIwMDM6CisgIEZpeCBjbG9jayBjYWxjdWxhdGlvbiBmb3IgdGhlIE1QQzUyMDAgZm9yIGhpZ2hlciBjbG9jayBmcmVxdWVuY2llcworICAoYWJvdmUgMioqMzIgLyAxMCA9IDQyOS41IE1IeikuCisKKyogRml4IENPTkZJR19QTExfUENJX1RPX01FTV9NVUxUSVBMSUVSIGRpdmlkZXIgZXJyb3IgaW4gU1A4MjQwIGNvbmZpZ3VyYXRpb24KKworKiBGaXggSWNlQ3ViZSBDTEtJTiBjb25maWd1cmF0aW9uIChpdCdzIDMzLjAwMDAwME1IeikKKworKiBBZGQgbmV3IGNvbmZpZ3VyYXRpb24gZm9yIEljZUN1YmUgYm9hcmQgd2l0aCBERFIgbWVtb3J5CisKKyogVXBkYXRlIFRSQUIgbWVtb3J5IGNvbmZpZ3VyYXRpb25zCisKKyogQWRkIEpGRlMyIHN1cHBvcnQgZm9yIElOQ0EtSVAgYm9hcmQKKworKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMDkgRGVjIDIwMDM6CisgIC0gQlVCSU5HQTQwNUVQOiBjaGFuZ2VkIGZsYXNoIGRyaXZlciB0byBwcm90ZWN0IHRvcCBzZWN0b3IgY29udGFpbmluZworICAgIGZpcnN0IGluc3RydWN0aW9uLgorICAtIEJVQklOR0E0MDVFUDogY29uZmlndXJlZCAiZWVwcm9tIiBjb21tYW5kIHRvIGFjY2VzcyBib290IGNvbmZpZyBFRVBST00uCisgIC0gQlVCSU5HQTQwNUVQOiBmaXhlZCBQTEwgaW5pdCAoaW5pdCBjaGlwIHNlbGVjdHMgYmVmb3JlIEZQR0EvTlZSQU0gYWNjZXNzKS4KKyAgLSA0MDVFUDogZml4ZWQgU1BELWJhc2VkIFNEUkFNIGluaXQgKG9ubHkgdXNlIGJhbmtzIDAgYW5kIDEpLgorICAtIDQwNUVQOiBhZGRlZC9maXhlZCBzdXBwb3J0IGZvciAicmVnaW5mbyIgY29tbWFuZC4KKyAgLSA0eHg6IHJlbW92ZWQgc3B1cmlvdXMgTUlJIGVycm9yIG1lc3NhZ2VzIG9uICJtaWkgaW5mbyIgY29tbWFuZC4KKworKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAyOCBOb3YgMjAwMzoKKyAgYWRkIHN1cHBvcnQgZm9yIENvbGRGaXJlIENQVQorICBhZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgTTUyNzJDMyBhbmQgTTUyODJFVkIgYm9hcmRzCisKKyogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjQgTm92IDIwMDM6CisgIC0gYWRkIGEgcmV0dXJuIHZhbHVlIGZvciB0aGUgZnBnYSBjb21tYW5kCisgIC0gYWRkIGlkZV9wcmVpbml0KCkgZnVuY3Rpb24gY2FsbGVkIGluIGlkZV9pbml0IGlmIENPTkZJR19JREVfUFJFSU5JVAorICAgIGlzIGRlZmluZWQuIElmIGlkZV9wcmVpbml0IGZhaWxzLCBpZGVfaW5pdCBpcyBhYm9ydGVkLgorICAtIGZpeCBhbiBlbmRpYW5lc3MgcHJvYmxlbSBpbiBmYXQuaAorCisqIFBhdGNoIGJ5IFdvbHRlciBLYW1waHVpcywgMDUgRGVjIDIwMDM6CisgIEFkZCBzdXBwb3J0IGZvciBTTk1DJ3MgUVM4NTAvUVM4MjMvUVM4NjBUIGJvYXJkcworCisqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDMgRGVjIDIwMDM6CisgICJyZXZpdmUiIFUtQm9vdCBzdXBwb3J0IGZvciBvbGQgTW90b3JvbGEgTVBDODYwQURTIGJvYXJkCisKKyogUGF0Y2ggYnkgQ2FtKGlsbz8pLCAwMyBEZWMgMjAwMzoKKyAgbWFrZSBleGFtcGxlcyBidWlsZCBldmVuIHdpdGggYnJva2VuIE1vbnRhdmlzdGEgb2JqY29weQorCisqIFBhdGNoIGJ5IFBhdmVsIEJhcnR1c2VrLCAyNyBOb3YgMjAwMzoKKyAgZml4IGNvbnZlcnNpb24gcHJvYmxlbSB3aXRoICJib290cmV0cnkiIGV2aXJvbm1lbnQgdmFyaWFibGUKIAotICAgIEF1dG9tYXRpY2FsbHkgYWRqdXN0IEFSRkxBR1Mgc28gIm1ha2UgLXMiIGlzIHJlYWxseSBzaWxlbnQuCisqIFBhdGNoIGJ5IEFuZHJlIFNjaHdhcnosIDI0IE5vdiAyMDAzOgorICBhZGQgc3VwcG9ydCBmb3IgbXZibHVlIChtdkJsdWVMWU5YIGFuZCBtdkJsdWVCT1gpIGJvYXJkcwogCi1jb21taXQgZmFlNjg0ZTg5ODQ0ODU2MzgzYmRmMTAxNDQwODg5NTU3ZGYzZTZiMQotQXV0aG9yOiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+Ci1EYXRlOglTYXQgT2N0IDI4IDE2OjQ1OjAwIDIwMDYgKzAyMDAKKyogUGF0Y2ggYnkgUGF2ZWwgQmFydHVzZWssIDIxIE5vdiAyMDAzOgorICBzZXQgWk1JSSBicmlkZ2Ugc3BlZWQgb24gNDQwCiAKLSAgICBbUEFUQ0hdIG9tYXA5MjUuYzogUmVtb3ZlIHVudXNlZCBmdW5jdGlvbnMKKyogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTcgTm92IDIwMDM6CisgIEZpeCBtaXNtYXRjaGVkICNpZmRlZiAvICNlbmRpZiBpbiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaGFyZHdhcmUuaAogCi0gICAgU2lnbmVkLW9mZi1ieTogTGFkaXNsYXYgTWljaGwgPGxhZGlzQGxpbnV4LW1pcHMub3JnPgotICAgIFNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKyogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDE0IE5vdiAyMDAzOgorICAtIGJvYXJkL21wbC9jb21tb24vY29tbW9uX3V0aWwuYworICAgICogaW1wbGVtZW50IHN1cHBvcnQgZm9yIEJaSVAyIGNvbXByZXNzZWQgaW1hZ2VzCisgICAgKiB2YXJpb3VzIGNsZWFudXBzIChwcmludGYgLT4gcHV0cywgLi4uKQorICAtIGJvYXJkL21wbC9jb21tb24vZmxhc2guYworICAgICogcmVwb3J0IGNvcnJlY3QgZXJyb3JzIHRvIHVwcGVyIGxheWVycworICAgICogY2hlY2sgdGhlIGVyYXNlIGZhaWwgYW5kIFZQUCBsb3cgYml0cyBpbiBzdGF0dXMgcmVnCisgIC0gYm9hcmQvbXBsL3ZjbWE5L2NtZF92Y21hOS5jCisgIC0gYm9hcmQvbXBsL3ZjbWE5L2ZsYXNoLmMKKyAgICAqIHZhcmlvdXMgY2xlYW51cHMgKHByaW50ZiAtPiBwdXRzLCAuLi4pCisgIC0gY29tbW9uL2NtZF91c2IuYworICAgICogZml4IHR5cG8gaW4gY29tbWVudAorICAtIGNwdS9hcm05MjB0L3VzYl9vaGNpLmMKKyAgICAqIHN1cHBvcnQgZm9yIFMzQzI0MTAgaXMgbWlzc2luZyBpbiAjaWYgbGluZQorICAtIGRyaXZlcnMvY3M4OTAwLmMKKyAgICAqIHJlaW5pdCBzb21lIHJlZ2lzdGVycyBpbiBjYXNlIG9mIGVycm9yIChjYWJsZSBtaXNzaW5nLCAuLi4pCisgIC0gZnMvZmF0L2ZhdC5jCisgICAgKiBzdXBwb3J0IGZvciBVU0IvTU1DIGRldmljZXMgaXMgbWlzc2luZyBpbiAjaWYgbGluZQorICAtIGluY2x1ZGUvY29uZmlncy9NSVA0MDUuaAorICAtIGluY2x1ZGUvY29uZmlncy9QSVA0MDUuaAorICAgICogZW5hYmxlIEJaSVAyIHN1cHBvcnQKKyAgICAqIGVubGFyZ2UgbWFsbG9jIHNwYWNlIHRvIDFNaUIgYmVjYXVzZSBvZiBCWklQMiBzdXBwb3J0CisgIC0gaW5jbHVkZS9jb25maWdzL1ZDTUE5LmgKKyAgICAqIGVuYWJsZSBCWklQMiBzdXBwb3J0CisgICAgKiBlbmxhcmdlIG1hbGxvYyBzcGFjZSB0byAxTWlCIGJlY2F1c2Ugb2YgQlpJUDIgc3VwcG9ydAorICAgICogZW5hYmxlIFVTQiBzdXBwb3J0CisgIC0gbGliX2FybS9hcm1saW51eC5jCisgICAgKiBjaGFuZ2UgY2FsbGluZyBjb252ZW50aW9uIG9mIEFSTSBMaW51eCBrZXJuZWwgYXMKKyAgICAgIGRlc2NyaWJlZCBvbiBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL2Jvb3RpbmcucGhwCiAKLWNvbW1pdCAxMjY1NTgxNTAyYWI4ZWE4YzA4ZThlZGJlOWJmNjRmYmQ2MmZkNzc2Ci1BdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KLURhdGU6CVNhdCBPY3QgMjggMTc6MTI6NTggMjAwNiArMDIwMAorKiBQYXRjaCBieSBUaG9tYXMgTGFuZ2UsIDE0IE5vdiAyMDAzOgorICBTcGxpdCBkYmF1MXgwMCBpbnRvIGRiYXUxMDAwLCBkYmF1MTEwMCBhbmQgZGJhdTE1MDAgY29uZmlncyB0bworICBzdXBwb3J0IGFsbCB0aGVzZSBBTUQgYm9hcmRzLgogCi0gICAgW1BBVENIXSBBZGQgc29tZSBtaXNzaW5nIG1hY2h0eXBlcyBmb3IgbmV0c3RhciAmIHZvaWNlYmx1ZSBib2FyZHMKKyogUGF0Y2ggYnkgVGhvbWFzIExhbmdlLCAxNCBOb3YgMjAwMzoKKyAgV29ya2Fyb3VuZCBmb3IgbWlwcyBhdTF4MDAgcGh5c2ljYWwgbWVtb3J5IGFjY2Vzc2VzICh0aGUgYXUxeDAwCisgIHVzZXMgYSAzNiBiaXQgYnVzIGludGVybmFsbHkgYW5kIGNhbm5vdCBhY2Nlc3MgcGh5c2ljYWwgbWVtb3J5CisgIGRpcmVjdGx5LiBVc2UgdGhlIHVuY2FjaGVkIFNEUkFNIGFkZHJlc3MgaW5zdGVhZCBvZiB0aGUgcGh5c2ljYWwKKyAgb25lLikKIAotICAgIFVzZSBNQUNIX1RZUEVfTkVUU1RBUiBhbmQgTUFDSF9UWVBFX1ZPSUNFQkxVRSBkZWZpbmVzIGluc3RlYWQgb2YKLSAgICBudW1iZXJzIGluIGNvZGUuCisqIFBhdGNoIGJ5IFh1ZSBMaWdvbmcgKEpvZSksIDEzIE5vdiAyMDAzOgorICBhZGQgUmVhbHRlayA4MDE5IGV0aGVybmV0IGRyaXZlcgogCi0gICAgU2lnbmVkLW9mZi1ieTogTGFkaXNsYXYgTWljaGwgPGxhZGlzQGxpbnV4LW1pcHMub3JnPgotICAgIFNpZ25lZC1vZmYtYnk6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTMgTm92IDIwMDM6CisgIE1QQzgyNnhBRFMvUFEyRkFEUyAgY2xlYW51cAogCi1jb21taXQgODU2ZjA1NDQxMGNlZjUyZDg2OGZlYjMzMDE2OGIyYTRjNDA5MTMyOAotQXV0aG9yOiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+Ci1EYXRlOglTYXQgT2N0IDI4IDE1OjU1OjUyIDIwMDYgKzAyMDAKKyogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTIgTm92IDIwMDM6CisgIFVwZGF0ZSBSRUFETUUgdG8gbWFyayB0aGUgUE9SVElPIGNvbW1hbmRzIG5vbi1zdGFuZGFyZAogCi0gICAgW1BBVENIXSBOQU5EOiBQYXJ0aXRpb24gbmFtZSBzdXBwb3J0IGFkZGVkIHRvIE5BTkQgc3Vic3lzdGVtCisqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmnocmUsIDEyIE5vdiAyMDAzOgorICB1cGRhdGUgZm9yIGZvciBBdG1lbCBBVDkxUk05MjAwREsgZGV2ZWxvcG1lbnQga2l0OgorICAtIHN1cHBvcnQgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBEYXRhRmxhc2gKKyAgLSBBdG1lbCBEYXRhRmxhc2ggQVQ0NURCMTI4MiBzdXBwb3J0CiAKLSAgICBjaHBhcnQsIG5ib290IGFuZCBOQU5EIHN1YnN5c3RlbSByZWxhdGVkIGNvbW1hbmRzIG5vdyBhY2NlcHQgYWxzbyBwYXJ0aXRpb24KLSAgICBuYW1lIHRvIHNwZWNpZnkgb2Zmc2V0LgorKiBQYXRjaCBieSBKZWZmIENhcnIsIDExIE5vdiAyMDAzOgorICBhZGQgc3VwcG9ydCBmb3IgbmV3IHZlcnNpb24gb2YgODI3MCBwcm9jZXNzb3JzCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBMYWRpc2xhdiBNaWNobCA8bGFkaXNAbGludXgtbWlwcy5vcmc+Ci0gICAgU2lnbmVkLW9mZi1ieTogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgorKiBQYXRjaGVzIGJ5IEdlb3JnZSBHLiBEYXZpcywgMDUgTm92IDIwMDM6CisgIC0gb25seSBwYXNzIHRoZSBBUk0gbGludXggaW5pdHJkIHRhZyB0byB0aGUga2VybmVsIHdoZW4gYW4gaW5pdHJkCisgICAgaXMgYWN0dWFsbHkgcHJlc2VudAorICAtIHVwZGF0ZSBvbWFwMTUxMGlubiBjb25maWd1cmF0aW9uIGZpbGUKIAotY29tbWl0IDA3YTY5YTE4YzJlY2ZkYTkwNDIzMWZkZjIzZTI1MjNlYTc3OTJlYjYKLUF1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAcG9sbHV4LmRlbnguZGU+Ci1EYXRlOglTYXQgT2N0IDI4IDAyOjI5OjQ0IDIwMDYgKzAyMDAKKyogUGF0Y2hlcyBieSBTdGVwaGFuIExpbnosIDMgTm92IDIwMDM6CisgIC0gbW9yZSBlbmRpYW5lc3MgZml4ZXMgZm9yIExBTjkxQzExMSBkcml2ZXIKKyAgLSBDRkdfSFogY29uZmlndXJhdGlvbiBwYXRjaCBmb3IgTklPUyBDeWNsb25lIGJvYXJkCiAKLSAgICBVcGRhdGUgQ0hBTkdFTE9HLgorKiBQYXRjaCBieSBTdGVwaGFuIExpbnosIDI4IE9jdCAyMDAzOgorICBmaXggUEhZX0lOVF9SRUcgdnMuIFBIWV9NQVNLX1JFRyBidWcgaW4gZHJpdmVycy9zbWM5MTExMS5jCiAKLWNvbW1pdCAyNzUxYTk1YWJkMWI5NjkxMTA4MWMzNTdlOTZhMTJmYTk3YjQwZGVlCi1BdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQHBvbGx1eC5kZW54LmRlPgotRGF0ZToJU2F0IE9jdCAyOCAwMjoyOToxNCAyMDA2ICswMjAwCisqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDIwIE9jdCAyMDAzOgorICAtIG1ha2UgIm1paSBpbmZvIDxhZGRyPiIgc2hvdyBpbmZvciBmb3IgUEhZIGF0ICJhZGRyIiBvbmx5CisgIC0gRW5kaWFuIGZpeCBmb3IgbWlpcGh5X2luZm8oKQogCi0gICAgRW5hYmxlIGNvbW1hbmRsaW5lIGVkaXRpbmcgYW5kIGh1c2ggc2hlbGwgb24gYWxsIFRRTSBib2FyZHMuCisqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMTkgU2VwIDIwMDM6CisgIE1vdmUgbW9zdCBvZiB0aGUgdGltZXIgaW50ZXJydXB0IHJlbGF0ZWQgUFBDIGNvZGUgdG8gcHBjX2xpYi9pbnRlcnJ1cHRzLmMKIAotY29tbWl0IDgwNzhmMWE1ZjYzYTczOWI4NTMzNDc4ZjZjMmI2MmZiMWUyZjc5ZDcKLUF1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAcG9sbHV4LmRlbnguZGU+Ci1EYXRlOglTYXQgT2N0IDI4IDAyOjI4OjAyIDIwMDYgKzAyMDAKKyogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTcgU2VwIDIwMDM6CisgIEJyaW5nIEFSTSBtZW1vcnkgbGF5b3V0IGluIHN5bmMgd2l0aCB0aGUgZG9jdW1lbnRhdGlvbjoKKyAgc3RhY2sgYW5kIG1hbGxvYy1oZWFwIGFyZSBub3cgbG9jYXRlZCBfYmVsb3dfIHRoZSBVLUJvb3QgY29kZQogCi0gICAgUkVBRE1FIHNheXMgQ0ZHX0FVVE9fQ09NUExFVEUsIGJ1dCBvY2RlIHVzZXMgQ09ORklHX0FVVE9fQ09NUExFVEUKKyogQWNjZWxlcmF0ZSBib290aW5nIG9uIFRSQUIgYm9hcmQ6IHJlYWQgYW5kIGNoZWNrICBhdXRvdXBkYXRlCWltYWdlCisgIGhlYWRlcnMgZmlyc3QgaW5zdGVhZCBvZiBhbHdheXMgcmVhZGluZyB0aGUgd2hvbGUgaW1hZ2VzLgogCi1jb21taXQgNDcxYTdiZTdhMDQyZTk1ZTQ0MGY1ZGU5NjljOTc2NTIxNGFlOGQ2ZQotQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgotRGF0ZToJU2F0IE9jdCAyOCAwMToxNDozMiAyMDA2ICswMjAwCisqIEZpeCB0eXBlIGluIE1QQzVYWFggY29kZSAocG9pbnRlZCBvdXQgYnkgVmljdG9yIFdyZW4pCiAKLSAgICBDaGVjayBmb3IgaWxsZWdhbCBjaGFyYWN0ZXIgJz0nIGluIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzLgorKiBFbmFibGVkIHBhc3N3b3JkIGNoZWNrIG9uIFJNVSBib2FyZAogCi0gICAgTWFrZSBzdXJlIHRoZSBzdHJpbmcgcGFzc2VkIGFzIHZhcmlhYmxlIG5hbWUgZG9lcyBub3QgY29udGFpbiBhICc9JwotICAgIGNoYXJhY3Rlci4gVGhpcyBub3Qgb25seSBwcmV2ZW50cyB0aGUgY29tbW9uIGVycm9yIG9yIHR5cGluZwotICAgICJzZXRlbnYgZm9vPWJhciIgaW5zdGVhZCBvZiAic2V0ZW52IGZvbyBiYXIiLCBidXQgKG1vcmUgaW1wb3J0YW50bHkpCi0gICAgYWxzbyBjbG9zZXMgYSBiYWNrZG9vciB3aGljaCBhbGxvd2VkIHRvIGRlbGV0ZSB3cml0ZS1wcm90ZWN0ZWQKLSAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGZvciBleGFtcGxlIGJ5IHVzaW5nICJzZXRlbnYgZXRoYWRkcj0iLgorKiBGaXggY29uZmlndXJhdGlvbiBwcm9ibGVtIHdpdGggSWNlQ3ViZSBpbiBMT1dCT09UIGNvbmZpZ3VyYXRpb246CisgIGVudnJpb25tZW50IGdvdCBlbWJlZGRlZCwgY29ycnVwdGluZyB0aGUgaW1hZ2UgbGF5b3V0LgogCi1jb21taXQgMTk5NzNiNmFkOTg2M2E1NmY1YzVmYmNmZDkwZTIwYWIyNDkwYTJjMgotQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBwb2xsdXguZGVueC5kZT4KLURhdGU6CVNhdCBPY3QgMjggMDA6Mzg6MzkgMjAwNiArMDIwMAorKiBGaXggTkVDIGRpc3BsYXkgbmFtZXMgKGl0J3MgNjQ0MCBbZm9yIDY0MHg0ODBdLCBub3QgNjY0MCkuCiAKLSAgICBNaW5vciBjb2RlIGNsZWFudXAuCisqIEFkZGVkIEJNUzIwMDMgYm9hcmQKKyAgYWRkIHN1cHBvcnQgZm9yIE5FQyBOTDY0NDhCQzMzLTU0LiAxMC40IiwgNjQweDQ4MCBURlQgZGlzcGxheQogCi1jb21taXQgZTExODg3YTc3ZDgxMDc3NDE2YTJkMWM1ZTAzNTQ5MTZmZWU4YzAzNAotQXV0aG9yOiBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KLURhdGU6CVRodSBPY3QgMjYgMTc6NTU6MzEgMjAwNiArMDIwMAorKiBGaXggZmxhc2ggZHJpdmVyIGZvciBUUkFCIGJvYXJkIChtdXN0IHVzZSBVbmxvY2sgQnlwYXNzIFJlc2V0CisgIGNvbW1hbmQgdG8gZXhpdCBVbmxvY2sgQnlwYXNzIE1vZGUpOyBhZGp1c3QgdGltaW5ncyBmb3IgZmxhc2gsIFNSQU0KKyAgYW5kIENQTEQKIAotICAgIERvbid0IHBhc3MgYW55IGRlYnVnIG9wdGlvbnMgZGlyZWN0bHkgdG8gdGhlIGFzc2VtYmxlcgorKiBVc2UgIi1mUElDIiBpbnN0ZWFkIG9mICItbXJlbG9jYXRhYmxlIiB0byBwcmV2ZW50IHByb2JsZW1zIHdpdGgKKyAgcmVjZW50IHRvb2xzCiAKLSAgICBXaGVuIHBhc3NpbmcgdGhlIC1nIG9wdGlvbiB0byBnY2MsIGdjYyBhdXRvbWF0aWNhbGx5IHNlbGVjdHMgYQotICAgIHN1aXRhYmxlIC0tZzxmb3JtYXQ+IG9wdGlvbiB0byBwYXNzIG9uIHRvIHRoZSBhc3NlbWJsZXIuCi0gICAgVGh1cywgdGhlcmUncyBubyBwb2ludCBpbiBmb3JjaW5nIGEgc3BlY2lmaWMgZGVidWcgb3B0aW9uIG9uIHRoZQotICAgIGFzc2VtYmxlciB1c2luZyB0aGUgLVdhIG1lY2hhbmlzbS4KKyogQWRkIGNoZWNrc3VtIHZlcmlmaWNhdGlvbiB0byAnaW1scycgY29tbWFuZAogCi0gICAgU2lnbmVkLW9mZi1ieTogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisqIEFkZCBiZF9pbmZvIGZpZWxkcyBuZWVkZWQgZm9yIDR4eCBMaW51eCBJMkMgZHJpdmVyCiAKLWNvbW1pdCBlYTA4ZmY2ZTE0ZjllYmI4YzA3Y2ZhNzljNTFlZjU0MGViMDg3MzkzCi1BdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglGcmkgT2N0IDI3IDA3OjQ3OjIyIDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgNCBOb3YuIDIwMDM6CisgIEZpeCBlcnJvciBpbiBjbWRfdmZkLmMgKFRSQUIgYm9hcmQ6ICJ2ZmQgLzEiIHNob3dzIG5vdyBvbmx5IG9uZSBCaXRtYXApCiAKLSAgICBNUEM4Nnh4OiBDbGVhbmVkIHVwIHVudXNlZCBhbmQgY29uZGl0aW9uYWxseSB1c2VkIGxvY2FsIHZhcmlhYmxlcy4KKyogUHJpbnQgdXNlZCBuZXR3b3JrIGludGVyZmFjZSB3aGVuIENPTkZJR19ORVRfTVVMVEkgaXMgc2V0CiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAyOCBPY3QgMjAwMzoKKyAgQWRkIGxvdyBib290IHN1cHBvcnQgZm9yIE1QQzUyMDAKIAotY29tbWl0IGQzODkzNmNkYWU0NmJmZDI2MjNmZjgzZjZjZTliNjE2ZDM2YWIwZjkKLUF1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAcG9sbHV4LmRlbnguZGU+Ci1EYXRlOglGcmkgT2N0IDI3IDExOjU1OjIxIDIwMDYgKzAyMDAKKyogRml4IHByb2JsZW0gd2l0aCBkdWFsIFBDTUNJQSBzdXBwb3J0IChOU0NVKQogCi0gICAgRml4ICJhciIgZmxhZ3MgaW4gc29tZSBNYWtlZmlsZXMgdG8gYWxsb3cgZm9yIHNpbGVudCAibWFrZSAtcyIKKyogRml4IE1QQzUyMDAgSTJDIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uCiAKLWNvbW1pdCA0NjUzZjkxYzEzZWQ1MWMyMWNjNGMzODU1NzQ1ZDY5YTNmYjE4MTdmCi1BdXRob3I6IEJlbiBXYXJyZW4gPGJ3YXJyZW5AcXN0cmVhbXMuY29tPgotRGF0ZToJVGh1IE9jdCAyNiAxNDozODoyNSAyMDA2IC0wNDAwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMS4wLjA6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSAgICBGaXggVFNFQyBkcml2ZXIgKG5vdyBmb3IgcmVhbCk6IGF2b2lkIGNyYXNoZXMgaWYgUEhZIGlzIG5vdCBhdHRhY2hlZAotICAgIHRvIGEgVFNFQyAoZS5nLiBhIHN3aXRjaCBpcyBjb25uZWN0ZWQgdmlhIFJNSUkpIG9yCi0gICAgaWYgdGhlIFBIWSBpcyBkZWZlY3RpdmUvaW5jb3JyZWN0bHkgY29uZmlndXJlZC4KKyogRml4IHBhcmFtZXRlciBwYXNzaW5nIHRvIHN0YW5kYWxvbmUgaW1hZ2VzIHdpdGggYm9vdG0gY29tbWFuZAogCi0gICAgU2lnbmVkLW9mZi1ieTogQmVuIFdhcnJlbiA8YndhcnJlbkBxc3RyZWFtcy5jb20+CisqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAzMCBPY3QgMjAwMzoKKyAgRml4IGJ1aWxkIGVycm9ycyBmb3IgaXhkcDQyNSBib2FyZAogCi1jb21taXQgYjk4NWI1ZDZlNGZiODhmNTA4ZjdhYTBmMTI2YzJlMjdhZGEyYjk5OQotQXV0aG9yOiBCZW4gV2FycmVuIDxid2FycmVuQHFzdHJlYW1zLmNvbT4KLURhdGU6CVRodSBPY3QgMjYgMTQ6Mzg6MjUgMjAwNiAtMDQwMAorKiBQYXRjaCBieSBEYXZpZCBNLiBIb3JuLCAyOSBPY3QgMjAwMzoKKyAgRml4ZXMgdG8gYnVpbGQgdW5kZXIgQ1lHV0lOCiAKLSAgICBGaXggVFNFQyBkcml2ZXI6IGF2b2lkIGNyYXNoZXMgaWYgUEhZIGlzIG5vdCBhdHRhY2hlZAotICAgIHRvIGEgVFNFQyAoZS5nLiBhIHN3aXRjaCBpcyBjb25uZWN0ZWQgdmlhIFJNSUkpIG9yCi0gICAgaWYgdGhlIFBIWSBpcyBkZWZlY3RpdmUvaW5jb3JyZWN0bHkgY29uZmlndXJlZC4KKyogR2V0IEljZUN1YmUgTUdUNTEwMCB3b3JraW5nIChhZ2FpbikKIAotICAgIFNpZ25lZC1vZmYtYnk6IEJlbiBXYXJyZW4gPGJ3YXJyZW5AcXN0cmVhbXMuY29tPgorKiBGaXggcHJvYmxlbXMgaW4gbWVtb3J5IHRlc3Qgb24gc29tZSBib2FyZHMgKHdoaWNoIHdhcyBub3QKKyAgbm9uLWRlc3RydWN0aXZlIGFzIGludGVuZGVkKQogCi1jb21taXQgMmIyYTQwYmViYmYxODIyNTA2ZTgwZTYzMWQ3MjUzZTYwZjBlMGZlNgotQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBwb2xsdXguZGVueC5kZT4KLURhdGU6CVRodSBPY3QgMjYgMTY6MjQ6MzEgMjAwNiArMDIwMAorKiBQYXRjaCBieSBHYXJ5IEplbm5lam9obiwgMjggT2N0IDIwMDM6CisgIENoYW5nZSBmcy9mYXQvZmF0LmMgdG8gcHV0IEkvTyBidWZmZXJzIGluIEJTUyBpbnN0ZWFkIG9uIHRoZSBzdGFjaworICB0byBwcmV2ZW50IHN0YWNrIG92ZXJmbG93IG9uIEFSTSBzeXN0ZW1zCiAKLSAgICBDb2RlIGNsZWFudXAuCisqIFBhdGNoIGJ5IFN0ZXBoYW4gTGlueiwgMjggT2N0IDIwMDM6CisgIGZpeCBpbml0IHNlcXVlbmNlIGVycm9yIGZvciBOSU9TIHBvcnQKIAotY29tbWl0IDVlM2IwYmMxOWYwN2VkMjc3ZDg1MzI0YWQwNDI3NjQyYzg5ODFiYWYKLUF1dGhvcjogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+Ci1EYXRlOglXZWQgT2N0IDI1IDE1OjQ4OjU5IDIwMDYgKzAyMDAKKyogQWxsb3cgbG93ZXJjYXNlIHNwZWxsaW5nIGZvciBJY2VDdWJlXzUyMDA7IHN1cHBvcnQgTVBDNTIwMExJVEUgbmFtZQogCi0gICAgRmluaXNoIHVwIHN1cHBvcnQgZm9yIHRoZSBBVFNUSzEwMDAvQVRTVEsxMDAyIGJvYXJkcworKiBBZGQgQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUgdG8gVFJBQiBjb25maWd1cmF0aW9uCiAKLSAgICBBZGQgYXRzdGsxMDAyX2NvbmZpZyB0YXJnZXQgdG8gTWFrZWZpbGUgYW5kIG1vdmUgdGhlIEFWUjMyIHNlY3Rpb24KLSAgICBkb3duIGJlbG93IEJsYWNrZmluIHNvIHRoYXQgaXQgZG9lc24ndCBlbmQgdXAgaW4gdGhlIG1pZGRsZSBvZgotICAgIE1JUFMuCisqIFBhdGNoIGJ5IFhpYW8gWGlhbmdodWEsIDIzIE9jdCAyMDAzOgorICBzbWFsbCBwYXRjaCBmb3IgbXBjODV4eAogCi0gICAgRHJvcCB0aGUgYXV0b2dlbmVyYXRlZCBsaW5rZXIgc2NyaXB0IHRoaW5nIGZvciBub3cuIFdpbGwgaGF2ZSB0bwotICAgIHJldmlzaXQgaG93IHRvIGhhbmRsZSBjaGlwcyB3aXRoIGRpZmZlcmVudCBmbGFzaCBhbmQgUkFNIGxheW91dAotICAgIGxhdGVyLgorKiBGaXggc21hbGwgcHJvYmxlbSBpbiBNUEM1MjAwIEkyQyBkcml2ZXIKIAotICAgIFNpZ25lZC1vZmYtYnk6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgorKiBGaXggRkNDMyBzdXBwb3J0IG9uIEFUQyBib2FyZAogCi1jb21taXQgYzc2Zjk1MWE3NDdjZmI4N2JhODI2ZWY0NWI1YWVhODJkNWI1ZGJiNAotQXV0aG9yOiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgotRGF0ZToJVHVlIE9jdCAyNCAyMzo0NzozNyAyMDA2IC0wNTAwCisqIENvcnJlY3QgaGVhZGVyIHByaW50aW5nIGZvciBtdWx0aS1pbWFnZSBmaWxlcyBpbiBkb19ib290bSgpCiAKLSAgICBBZGRlZCBzdXBwb3J0IGZvciBNdWx0aS1JbWFnZSBmaWxlcyB0aGF0IGNvbnRhaW4gYSBkZXZpY2UgdHJlZQorKiBNYWtlIENPTkZJR19TSUxFTlRfQ09OU09MRSB3b3JrIHdpdGggQ09ORklHX0FVVE9CT09UX0tFWUVECiAKLSAgICBJZiBhIE11bHRpLUltYWdlIGZpbGUgY29udGFpbnMgYSB0aGlyZCBpbWFnZSB3ZSB0cnkgdG8gdXNlIGl0IGFzIGEKLSAgICBkZXZpY2UgdHJlZS4gIFRoZSBkZXZpY2UgdHJlZSBpbWFnZSBpcyBhc3N1bWVkIHRvIGJlIHVuY29tcHJlc3NlZCBpbiB0aGUKLSAgICBpbWFnZSBmaWxlLgkgV2UgYXV0b21hdGljYWxseSBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGRldmljZSB0cmVlIGluIG1lbW9yeQotICAgIGFuZCBwcm92aWRlIGFuIDhrIHBhZCB0byBhbGxvdyBtb3JlIHRoYW4gYSByZWFzb25hYmxlIGFtb3VudCBvZiBncm93dGguCisqIEZpeCBQQ0kgcHJvYmxlbXMgb24gUFBDaGFtZWxlb24gYm9hcmQKIAotICAgIEFkZGl0aW9uYWxseSwgYSBkZXZpY2UgdHJlZSB0aGF0IHdhcyBjb250YWluZWQgaW4gZmxhc2ggd2lsbCBub3cgYXV0b21hdGljYWxseQotICAgIGdldCBjb3BpZWQgdG8gc3lzdGVtIG1lbW9yeSBhcyBwYXJ0IG9mIGJvb3QuICBQcmV2aW91c2x5IGFuIGVycm9yIHdhcwotICAgIHJlcG9ydGVkIGlmIG9uZSB0cmllZCB0byBib290IGEgZGV2aWNlIHRyZWUgdGhhdCB3YXMgaW4gZmxhc2guCisqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDE4IE9jdCAyMDAzOgorICBGaXggQVQ5MVJNOTIwMCBldGhlcm5ldCBkcml2ZXIKIAotICAgIFNpZ25lZC1vZmYtYnk6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisqIFBhdGNoIGJ5IE55ZSBMaXUsIDE3IE9jdCAyMDAzOgorICBGaXggdHlwbyBpbiBpbmNsdWRlL21wYzh4eC5oCiAKLWNvbW1pdCA3YzUyYzRiOTQzZmY1MmJiZTg3OTZhN2UyZDNlNDc2Y2VhZjNmNTEyCi1BdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+Ci1EYXRlOglUdWUgT2N0IDI0IDIxOjM1OjU1IDIwMDYgKzAyMDAKKyogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTYgT2N0IDAzOgorICBGaXhlcyBmb3IgY3B1L2FybTkyNS9pbnRlcnJ1cHQuYworICAtIEluaXRpYWxpemUgdGltZXN0YW1wICYgbGFzdGRlYyB2YXJzLgorICAtIGZpeCB0aW1lc3RhbXAgb3ZlcmZsb3dzLgorICAtIGZpeCBsYXN0ZGVjIG92ZXJmbG93LgorICAtIHNtYXJ0ZXIgbm9ybWFsaXphdGlvbiB0byBhbGxvdyB1ZGVsYXkoKSBiZWxvdyAxbXMgdG8gd29yay4KIAotICAgIFN3aXRjaCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBDSEFOR0VMT0cgZmlsZS4KLSAgICAodXNlICJtYWtlIENIQU5HRUxPRyIgdG8gdXBkYXRlIGl0IGZyb20gdGltZSB0byB0aW1lKQorKiBQYXRjaCBieSBTY290dCBNY051dHQsIDE2IE9jdAorICBhZGQgbmV0d29ya2luZyBzdXBwb3J0IGZvciB0aGUgQWx0ZXJhIE5pb3MgRGV2ZWxvcG1lbnQgS2l0LAorICBDeWNsb25lIEVkaXRpb24gKERLLTFDMjApCiAKLWNvbW1pdCA3YWRlMGM2MzRhOTc5YzMyZmE5MWE3NGU4ZjU3NzVmMjQ2NTFmYmU2Ci1BdXRob3I6IFN0ZWZhbiBSb2VzZSA8c3JAZGVueC5kZT4KLURhdGU6CVR1ZSBPY3QgMjQgMTg6MDY6NDggMjAwNiArMDIwMAorKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTQgT2N0IDIwMDM6CisgIGFkZCBoaW50IGFib3V0IGRvYy9SRUFETUUuc2lsZW50IHRvIFJFQURNRSBmaWxlCiAKLSAgICBGaXggYnVnIGluIFBQQzQ0MCBOQU5EIGRyaXZlciBjcHUvcHBjNHh4L25kZmMuYwotICAgIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjQgT2N0IDIwMDYKKyogQWRkIENvbXBhY3RGbGFzaCBzdXBwb3J0IGZvciBOU0NVCiAKLWNvbW1pdCA4YWUzYjcxM2IyMjg2ZTBjMzIxM2I3ODAyMDYyZTRjMTU5OTAxMGRlCi1BdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQHBvbGx1eC5kZW54LmRlPgotRGF0ZToJVHVlIE9jdCAyNCAxNzoyNDo1NSAyMDA2ICswMjAwCisqIEZpeCBQQ0kgcHJvYmxlbXMgb24gUFBDaGFtZWxlb25FVkIKIAotICAgIE1lcmdlIHdpdGggL2hvbWUvd2QvZ2l0L3UtYm9vdC9tYXN0ZXIKKyogVFJBQiBhdXRvLXVwZGF0ZTogQmFzZSBkZWNpc2lvbiBpZiB3ZSBoYXZlIHRvIHN0cmlwIHRoZSBpbWFnZQorICBoZWFkZXIgb24gaW1hZ2UgdHlwZSBhcyBlbmNvZGVkIGluIHRoZSBoZWFkZXIKKyAgKGluY2x1ZGUgaW1hZ2UgdHlwZSBwYXRjaCBieSBNYXJ0aW4gS3JhdXNlLCAxNyBPY3QgMjAwMykKIAotY29tbWl0IDQ3YTY5ODljMTA2ODVkMmFiM2VmY2Y5NTIyOGNlNTBkMmE0OTZkM2UKLUF1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAcG9sbHV4LmRlbnguZGU+Ci1EYXRlOglUdWUgT2N0IDI0IDE1OjMyOjU3IDIwMDYgKzAyMDAKKyogUGF0Y2hlcyBieSBYaWFuZ2h1YSBYaWFvLCAxNSBPY3QgMjAwMzoKIAotICAgIENvZGUgY2xlYW51cAorICAtIEFkZGVkIE1vdG9yb2xhIENQVSA4NTQwLzg1NjAgc3VwcG9ydCAoY3B1Lzg1eHgpCisgIC0gQWRkZWQgTW90b3JvbGEgTVBDODU0MEFEUyBib2FyZCBzdXBwb3J0IChib2FyZC9tcGM4NTQwYWRzKQorICAtIEFkZGVkIE1vdG9yb2xhIE1QQzg1NjBBRFMgYm9hcmQgc3VwcG9ydCAoYm9hcmQvbXBjODU2MGFkcykKIAotY29tbWl0IDNhNzhlM2U3NWI2MzNlY2I2NDEzMTE0ZmZkMTFlMmYwMDBjNGYxMWUKLUF1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAcG9sbHV4LmRlbnguZGU+Ci1EYXRlOglUdWUgT2N0IDI0IDE0OjUxOjM2IDIwMDYgKzAyMDAKKyogRml4IGZsYXNoIHRpbWluZ3Mgb24gVFJBQiBib2FyZAogCi0gICAgTW92ZSBhdHN0azEwMDAgZmlsZXMgaW50byB2ZW5kb3Igc3BlY2lmaWMgZGlyZWN0b3J5LgotICAgIFBhdGNoIGJ5IEhhYXZhcmQgU2tpbm5lbW9lbiwgMTIgU2VwIDIwMDYKKyogTWFrZSBzdXJlIEhVU0ggaXMgaW5pdGlhbGl6ZWQgZm9yIHJ1bm5pbmcgYXV0by11cGRhdGUgc2NyaXB0cwogCi1jb21taXQgNmNjZWM0NDkyZTc3NDI4ZmQ2ZWFmZDNkZmU5NGZiZGYwOGU5MWQzNwotQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBwb2xsdXguZGVueC5kZT4KLURhdGU6CVR1ZSBPY3QgMjQgMTQ6NDI6MzcgMjAwNiArMDIwMAorKiBNYWtlIDUyMDAgcmVzZXQgY29tbWFuZCBfcmVhbGx5XyByZXNldCB0aGUgYm9hcmQsIHdpdGhvdXQgcnVubmluZworICBhbnkgb3RoZXIgY29kZSBhZnRlciBpdAogCi0gICAgQWRkIEFUU1RLMTAwMCBhbmQgQVRTVEsxMDAyIGJvYXJkIHN1cHBvcnQKLSAgICBQYXRjaCBieSBIYWF2YXJkIFNraW5uZW1vZW4sIDA2IFNlcCAyMDA2CisqIEZpeCBlcnJvcnMgd2l0aCBmbGFzaCBlcmFzZSB3aGVuIHJhbmdlIHNwYW5zCWFjcm9zcyBiYW5rcworICB0aGF0IGFyZSBtYXBwZWQgaW4gcmV2ZXJzZSBvcmRlcgogCi0gICAgVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBVFNUSzEwMDAgd2l0aCB0aGUgQVRTVEsxMDAyIENQVQotICAgIGRhdWdodGVyYm9hcmQuCisqIEZpeCBmbGFzaCBtYXBwaW5nIGFuZCBkaXNwbGF5IG9uIFAzRzQgYm9hcmQKIAotICAgIEFUU1RLMTAwMCBpcyBhIGZ1bGwtZmVhdHVyZWQgZGV2ZWxvcG1lbnQgYm9hcmQgZm9yIEFUMzJBUCBDUFVzLiBJdAotICAgIGhhcyB0d28gZXRoZXJuZXQgcG9ydHMsIGEgaGlnaCBxdWFsaXR5IFFWR0EgTENEIHBhbmVsLCBhIGxvdWRzcGVha2VyLAotICAgIGFuZCBjb25uZWN0b3JzIGZvciBVU0FSVCwgUFMvMiwgVkdBLCBVU0IsIE1NQy9TRCBjYXJkcyBhbmQKLSAgICBDb21wYWN0Rmxhc2ggY2FyZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoaXMgcGFnZToKKyogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDE1IEp1bCAyMDAzOgorICAtIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBJWFA0MjUgQ1BVCisgIC0gYWRkIHN1cHBvcnQgZm9yIElYRFA0MjUgZXZhbCBib2FyZAogCi0gICAgaHR0cDovL3d3dy5hdG1lbC5jb20vZHluL3Byb2R1Y3RzL3Rvb2xzLmFzcD9mYW1pbHlfaWQ9NjgyCisqIEFkZGVkIGNvbmZpZyBvcHRpb24gQ09ORklHX1NJTEVOVF9DT05TT0xFLiAgU2VlIGRvYy9SRUFETUUuc2lsZW50CisgIGZvciBtb3JlIGluZm9ybWF0aW9uCiAKLSAgICBUaGUgQVRTVEsxMDAyIGlzIGEgZGF1Z2h0ZXJib2FyZCBmb3IgdGhlIEFUU1RLMTAwMCBzdXBwb3J0aW5nIHRoZQotICAgIEFUMzJBUDcwMDAgY2hpcC4KKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTAgT2N0IDIwMDMKKyAgLSBBZGQgc3VwcG9ydCBmb3IgQWx0ZXJhIEZQR0EgQUNFWDFLCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBIYWF2YXJkIFNraW5uZW1vZW4gPGhza2lubmVtb2VuQGF0bWVsLmNvbT4KKyogUGF0Y2hlcyBieSBUaG9tYXMgTGFuZ2UsIDA5IE9jdCAyMDAzOgorICAtIGZpeCBjbWRfaWRlLmMgZm9yIG5vbiBwcGMgYm9hcmRzIChyZWFkL3dyaXRlIGZ1bmN0aW9ucyBkaWQgbm90CisgICAgYWRkIEFUQSBiYXNlIGFkZHJlc3MpCisgIC0gZml4IGZvciBzaGFubm9uIGJvYXJkCisgIC0gI2lmZGVmIENPTkZJR19JREVfOHh4X0RJUkVDVCBzb21lIG90aGVyd2lzZSB1bnVzZWQgY29kZQorICAtIEVuZGlhbiBzd2FwIEFUQSBpZGVudGl0eSBmb3IgYWxsIGJpZyBlbmRpYW4gQ1BVcywgbm90IGp1c3QgUFBDCisgIC0gTUlQUyBvbmx5OiBOZXcgb3B0aW9uIENPTkZJR19NRU1TSVpFX0lOX0JZVEVTIGZvciBwYXNzaW5nIG1lbXNpemUKKyAgICBhcmdzIHRvIGxpbnV4CisgIC0gYWRkIHN1cHBvcnQgZm9yIGRiYXUxeDAwIGJvYXJkIChNSVBTMzIpCiAKLWNvbW1pdCBmOTNhZTc4OGMzNjQwZmNkZTVkYjM4MzQ3MWQ0NTU0OGZmNDA2MGQwCi1BdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQHBvbGx1eC5kZW54LmRlPgotRGF0ZToJVHVlIE9jdCAyNCAxNDozMToyNCAyMDA2ICswMjAwCisqIFBhdGNoIGJ5IFNhbmdtb29uIEtpbSwgMDcgT2N0IDIwMDM6CisgIGFkZCBzdXBwb3J0IGZvciBkZWJyaXMgYm9hcmQKIAotICAgIEFkZCBjb21tb24gc2VyaWFsIGRyaXZlciBmb3IgQXRtZWwgQVQzMiBhbmQgQVQ5MSBjaGlwcwotICAgIFBhdGNoIGJ5IEhhYXZhcmQgU2tpbm5lbW9lbiwgMDYgU2VwIDIwMDYKKyogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDkgT2N0IDIwMDM6CisgIEZpeGVzIGZvciBUUkFCIGJvYXJkCisgIC0gL2JvYXJkL3RyYWIvcnM0ODUuYzogY29ycmVjdCBiYXVkcmF0ZQorICAtIC9ib2FyZC90cmFiL2NtZF90cmFiLmM6IGJ1ZyBmaXggZm9yIHByb2JsZW0gd2l0aCB0aW1lciBvdmVyZmxvdyBpbgorICAgIHVkZWxheSgpOyBmaXggc29tZSB0aW1pbmcgcHJvYmxlbXMgd2l0aCBhZGMgY29udHJvbGxlcgorICAtIC9ib2FyZC90cmFiL3RyYWJfZmt0LmM6IGFkZCBuZXcgY29tbWFuZHM6IGdhaW4sIGVlcHJvbSBhbmQgcG93ZXI7CisgICAgbW9kaWZ5IGNvbW1hbmRzOiB0b3VjaCBhbmQgYnV6emVyCiAKLSAgICBUaGlzIGlzIGEgZmlyc3QgYXR0ZW1wdCBhdCBjcmVhdGluZyBhIGNvbW1vbiBzZXJpYWwgZHJpdmVyIGZvciBBdG1lbAotICAgIGNoaXBzLiBGb3Igbm93LCBpdCBzdXBwb3J0cyB0aGUgQVQzMkFQNzAwMCBBVlIzMiBjaGlwLCBidXQgaXQgc2hvdWxkCi0gICAgYmUgcG9zc2libGUgdG8gc3VwcG9ydCBBVDkxUk05MjAwIGFuZCBvdGhlciBBUk0tYmFzZWQgY2hpcHMgd2l0aCBzb21lCi0gICAgbWlub3IgbW9kaWZpY2F0aW9ucy4KKyogRGlzYWJsZSBDT05GSUdfU1VQUE9SVF9WRkFUIHdoZW4gdXNlZCB3aXRoIENPTkZJR19BVVRPX1VQREFURQorICAocXVpY2sgJiBkaXJ0eSB3b3JrYXJvdW5kIGZvciByb2d1ZSBwb2ludGVyIHByb2JsZW0gaW4gZ2V0X3ZmYXRuYW1lKCkpOworICBVc2UgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzIGZvciBhdXRvX3VwZGF0ZSBpbnN0ZWFkIG9mIGh1c2ggY29tbWFuZHMKIAotICAgIFRoZXJlJ3Mgbm90aGluZyBmdW5kYW1lbnRhbGx5IEFWUjMyLXNwZWNpZmljIGluIHRoaXMgZHJpdmVyLCBidXQgaXQKLSAgICBkb2VzIHVzZSBzb21lIGZlYXR1cmVzIHdoaWNoIGFyZSBjdXJyZW50bHkgb25seSBkZWZpbmVkIGZvciB0aGUKLSAgICBBVDMyQVAgQ1BVIHBvcnQ6Ci0gICAgICAqIHBtX2dldF9jbG9ja19mcmVxOiBPYnRhaW4gdGhlIGNsb2NrIGZyZXF1ZW5jeSBvZiBhIGdpdmVuIGRvbWFpbgotICAgICAgKiBnZC0+Y29uc29sZV91YXJ0OiBBICJzdHJ1Y3QgZGV2aWNlIiBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0Ci0JcmVnaXN0ZXIgbWFwcGluZ3MsIGdwaW8gcmVzb3VyY2VzIGFuZCBjbG9ja3MgYXNzb2NpYXRlZCB3aXRoIHRoZQotCVVBUlQgZGV2aWNlLgorKiBQYXRjaCBieSBTY290dCBNY051dHQsIDA0IE9jdCAyMDAzOgorICAtIGFkZCBzdXBwb3J0IGZvciBBbHRlcmEgTmlvcy0zMiBDUFUKKyAgLSBhZGQgc3VwcG9ydCBmb3IgTmlvcyBDeWNsb25lIERldmVsb3BtZW50IEtpdCAoREstMUMyMCkKIAotICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIGZlYXR1cmVzLCBwbGVhc2Ugc2VlIHRoZSAiQVQzMkFQCi0gICAgQ1BVIiBwYXRjaC4KKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMjkgU2VwIDIwMDM6CisgIC0gQSBzZWNvbmQgcGFyYW1ldGVyIGZvciBib290bSBvdmVyd3JpdGVzIHRoZSBsb2FkIGFkZHJlc3MgZm9yCisgICAgIlN0YW5kYWxvbmUgQXBwbGljYXRpb24iIGltYWdlcy4KKyAgLSBib290bSBzZXRzIGVudmlyb25tZW50IHZhcmlhYmxlICJmaWxlc2l6ZSIgdG8gdGhlIHJlc3VsdGluZworICAgICh1bmNvbXByZXNzZWQpIGRhdGEgbGVuZ3RoIGZvciAiU3RhbmRhbG9uZSBBcHBsaWNhdGlvbiIgaW1hZ2VzCisgICAgd2hlbiBhdXRvc3RhcnQgaXMgc2V0IHRvICJubyIuIE5vdyB5b3UgY2FuIGRvIHNvbWV0aGluZyBsaWtlCisJaWYgYm9vdG0gJGZwZ2FkYXRhICRzb21lX2ZyZWVfcmFtIDsgdGhlbgorCQlmcGdhIGxvYWQgMCAkc29tZV9mcmVlX3JhbSAkZmlsZXNpemUKKwlmaQogCi1jb21taXQgNzJhMDg3ZTA0NzA1YzI2Y2FkOTgyODc5ZWJkMDZiNTI4MWJmODI1YQotQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBwb2xsdXguZGVueC5kZT4KLURhdGU6CVR1ZSBPY3QgMjQgMTQ6Mjc6MzUgMjAwNiArMDIwMAorKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMjUgU2VwdCAyMDAzOgorICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNSBSZXYuIEMgYm9hcmQKIAotICAgIEFkZCBBVDMyQVAgQ1BVIGFuZCBBVDMyQVA3MDAwIFNvQyBzdXBwb3J0Ci0gICAgUGF0Y2ggYnkgSGFhdmFyZCBTa2lubmVtb2VuLCAwNiBTZXAgMjAwNgorKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyNSBTZXAgMjAwMzoKKyAgYWRkIHN1cHBvcnQgZm9yIFplcGh5ciBFbmdpbmVlcmluZyBaUEMuMTkwMCBib2FyZAogCi0gICAgVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBBVDMyQVAgQ1BVIGZhbWlseSBhbmQgdGhlIEFUMzJBUDcwMDAKLSAgICBjaGlwLCB3aGljaCBpcyB0aGUgZmlyc3QgY2hpcCBpbXBsZW1lbnRpbmcgdGhlIEFWUjMyIGFyY2hpdGVjdHVyZS4KKyogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjMgU2VwIDIwMDM6CisgIGFkZCBDTURfUE9SVElPIHRvIENGR19DTURfTk9OU1REIChjb21tYW5kcyBpbiBxdWVzdGlvbiBhcmUgb25seQorICBpbXBsZW1lbnRlZCBmb3IgdGhlIHg4NiBhcmNoaXRlY3R1cmUpCiAKLSAgICBUaGUgQVQzMkFQIENQVSBjb3JlIGlzIGEgaGlnaC1wZXJmb3JtYW5jZSBpbXBsZW1lbnRhdGlvbiBmZWF0dXJpbmcgYQotICAgIDctc3RhZ2UgcGlwZWxpbmUsIHNlcGFyYXRlIGluc3RydWN0aW9uLSBhbmQgZGF0YSBjYWNoZXMsIGFuZCBhIE1NVS4KLSAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgIkFWUjMyIEFQIFRlY2huaWNhbCBSZWZlcmVuY2UiOgorKiBQYXRjaCBieSBTYW5nbW9vbiBLaW0sIDIzIFNlcCAyMDAzOgorICBmaXggcGxsX3BjaV90b19tZW1fbXVsdGlwbGllciB0YWJsZSBmb3IgTVBDODI0NQogCi0gICAgaHR0cDovL3d3dy5hdG1lbC5jb20vZHluL3Jlc291cmNlcy9wcm9kX2RvY3VtZW50cy9kb2MzMjAwMS5wZGYKKyogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMjIgU2VwIDIwMDM6CisgIGVuYWJsZSB0aW1lZCBhdXRvYm9vdCBvbiBQWEEKIAotICAgIEluIGFkZGl0aW9uIHRvIHRoaXMsIHRoZSBBVDMyQVA3MDAwIGNoaXAgY29tZXMgd2l0aCBhIGxhcmdlIHNldCBvZgotICAgIGludGVncmF0ZWQgcGVyaXBoZXJhbHMsIG1hbnkgb2Ygd2hpY2ggYXJlIHNoYXJlZCB3aXRoIHRoZSBBVDkxIHNlcmllcwotICAgIG9mIEFSTS1iYXNlZCBtaWNyb2NvbnRyb2xsZXJzIGZyb20gQXRtZWwuIEZ1bGwgZGF0YSBzaGVldCBpcwotICAgIGF2YWlsYWJsZSBoZXJlOgorKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDIyIFNlcCAyMDAzOgorICAtIGFkZCAkKENGTEFHUykgdG8gIi1wcmludC1saWJnY2MtZmlsZW5hbWUiIHNvIGNvbXBpbGVyIGRyaXZlcgorICAgIHJldHVybnMgY29ycmVjdCBsaWJnY2MgZmlsZSBwYXRoCisgIC0gImxhdGVuY3kiIHJlZHVjdGlvbiBvZiBidXN5LWxvb3Agd2FpdGluZyB0byBpbXByb3ZlICJVLUJvb3QiIGJvb3QKKyAgICB0aW1lIG9uIHMzYzI0eDAgc3lzdGVtcwogCi0gICAgaHR0cDovL3d3dy5hdG1lbC5jb20vZHluL3Jlc291cmNlcy9wcm9kX2RvY3VtZW50cy9kb2MzMjAwMy5wZGYKKyogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE5IFNlcCAyMDAzOgorICAtIEFkZCBDRkdfRkFVTFRfRUNIT19MSU5LX0RPV04gb3B0aW9uIHRvIGVjaG8gdGhlIGludmVydGVkIEV0aGVybmV0CisgICAgbGluayBzdGF0ZSB0byB0aGUgZmF1bHQgTEVELgorICAtIEluIE5ldExvb3AsIG1ha2UgdGhlIEZhdWx0IExFRCByZWZsZWN0IHRoZSBsaW5rIHN0YXR1cy4gIFRoZSBsaW5rCisgICAgc3RhdHVzIGdldHMgdXBkYXRlZCBvbiBlbnRyeSwgYW5kIG9uIHRpbWVvdXRzLgogCi0gICAgU2lnbmVkLW9mZi1ieTogSGFhdmFyZCBTa2lubmVtb2VuIDxoc2tpbm5lbW9lbkBhdG1lbC5jb20+CisqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDE4IFNlcCAyMDAzOgorICBhbGxvdyBta2ltYWdlIHRvIGJ1aWxkIGFuZCBydW4gb24gQ3lnd2luLWhvc3RlZCBzeXN0ZW1zCiAKLWNvbW1pdCA3YjY0ZmVmMzNjNjZiZTY0ODgyNmMwZmY5NzU4Mjk4ZWYxM2QwNjA0Ci1BdXRob3I6IFdvbGZnYW5nIERlbmsgPHdkQHBvbGx1eC5kZW54LmRlPgotRGF0ZToJVHVlIE9jdCAyNCAxNDoyMToxNiAyMDA2ICswMjAwCisqIFBhdGNoIGJ5IEZyYW5rIE38bGxlciwgMTggU2VwIDIwMDM6CisgIHVzZSBiaV9pbnRmcmVxIGluc3RlYWQgb2YgYmlfYnVzZnJlcSB0byBjb21wdXRlIGZlY19taWlfc3BlZWQgaW4KKyAgY3B1L21wYzh4eC9mZWMuYwogCi0gICAgQWRkIEFWUjMyIGFyY2hpdGVjdHVyZSBzdXBwb3J0Ci0gICAgUGF0Y2ggYnkgSGFhdmFyZCBTa2lubmVtb2VuLCA2IFNlcCAyMDA2IDE2OjIzOjAyICswMjAwCisqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNiBTZXAgMjAwMzoKKyAgYWRkIHRvb2wgdG8gY29tcHV0ZSBmaWxlZHMgaW4gdGhlIFBMUFJDUiByZWdpc3RlciBmb3IgTVBDODZ4CiAKLSAgICBUaGlzIHBhdGNoIGFkZHMgY29tbW9uIGluZnJhc3RydWN0dXJlIGNvZGUgZm9yIHRoZSBBdG1lbCBBVlIzMgotICAgIGFyY2hpdGVjdHVyZS4gU2VlIGRvYy9SRUFETUUuQVZSMzIgZm9yIGRldGFpbHMuCisqIFVzZSBJSF9UWVBFX0ZJTEVTWVNURU0gZm9yIFRSQUIgImRpc2siIGltYWdlcy4KIAotICAgIFNpZ25lZC1vZmYtYnk6IEhhYXZhcmQgU2tpbm5lbW9lbiA8aHNraW5uZW1vZW5AYXRtZWwuY29tPgorKiBGaXggYnVpbGQgcHJvYmxlbXMgdW5kZXIgRnJlZUJTRAogCi1jb21taXQgMmRhMmQ5YTQ3NjYwNjNiOTg0OGYzYTM1YWQ2MDI1NDk5Y2Y4NzI2NQotQXV0aG9yOiBXb2xmZ2FuZyBEZW5rIDx3ZEBwb2xsdXguZGVueC5kZT4KLURhdGU6CVR1ZSBPY3QgMjQgMTM6NTc6MzMgMjAwNiArMDIwMAorKiBBZGQgZ2VuZXJpYyBmaWxlc3lzdGVtIGltYWdlIHR5cGUKIAotICAgIFVzZSAtZyBpbnN0ZWFkIG9mIC1nc3RhYnMgaW4gQUZMQUdTX0RFQlVHCi0gICAgUGF0Y2ggYnkgSGFhdmFyZCBTa2lubmVtb2VuLCAzMCBBdWcgMjAwNgorKiBNYWtlIGZhdGxvYWQgc2V0IGZpbGVzaXplIGVudmlyb25tZW50IHZhcmlhYmxlCiAKLSAgICBJbiBjb25maWcubWssIC1XYSwtZ3N0YWJzIGlzIHVuY29uZGl0aW9uYWxseSBhcHBlbmRlZCB0byBBRkxBR1Mgbm8KLSAgICBtYXR0ZXIgd2hhdCB0aGUgdGFyZ2V0J3MgcHJlZmVycmVkIGRlYnVnZ2luZyBmb3JtYXQgaXMuIFRoaXMgcGF0Y2gKLSAgICBzaW1wbHkgcmVwbGFjZXMgLWdzdGFicyB3aXRoIC1nLCBzbyB0aGF0IHRoZSBkZWZhdWx0IGRlYnVnZ2luZyBmb3JtYXQKLSAgICBmb3IgdGhlIGFyY2hpdGVjdHVyZSBpcyB1c2VkLgorKiBlbmFibGUgYmFzaWMgLyBtZWRpdW0gLyBoaWdoLWVuZCBjb25maWd1cmF0aW9ucyBmb3IgUFBDaGFtZWxlb25FVkIKKyAgYm9hcmQ7IGZpeCBOQU5EIGNvZGUKIAotY29tbWl0IDk2NTgyOTg3MjE2OWMyOTk2MDIzODQwZDk4ZTFkODVhZDE0OGQ2MjkKLUF1dGhvcjogV29sZmdhbmcgRGVuayA8d2RAcG9sbHV4LmRlbnguZGU+Ci1EYXRlOglUdWUgT2N0IDI0IDEzOjU1OjE4IDIwMDYgKzAyMDAKKyogZW5hYmxlIFRGVFAgY2xpZW50IGNvZGUgdG8gc3BlY2lmeSB0byB0aGUgc2VydmVyIHRoZSBkZXNpcmVkCisgIHRpbWVvdXQgdmFsdWUgKHNlZSBSRkMtMjM0OSkKIAotICAgIEZpeC93b3JrYXJvdW5kIGJyb2tlbiBkZXBlbmRlbmN5IGhhbmRsaW5nIHdpdGggbWFrZSAzLjgxCi0gICAgQmFzZWQgb24gcGF0Y2ggYnkgSGFhdmFyZCBTa2lubmVtb2VuLCAyOSBBdWcgMjAwNiAxMToyMDozOSArMDIwMAorKiBJbXByb3ZlIFNEUkFNIHNldHVwIGZvciBUUkFCIGJvYXJkCiAKLWNvbW1pdCA4MzE4ZmJmOGNjMzA0MThiNjIxZWE5ZjM5Yjg0YjRjMWEwOGYwMDNhCi1BdXRob3I6IE1hcmlhbiBCYWxha293aWN6IDxtOEBzZW1paGFsZi5jb20+Ci1EYXRlOglNb24gT2N0IDIzIDIyOjE3OjA1IDIwMDYgKzAyMDAKKyogU3VwcHJlc3MgYWxsIG91dHB1dCB3aXRoIHNwbGFzaHNjcmVlbiBjb25maWd1cmVkIG9ubHkgaWYgInNwbGFzaGltYWdlIgorICBpcyBzZXQKIAotICAgIEZpeCBzZXF1b2lhIHNlcGFyYXRlIG9iamVjdCBkaXJlY29yeSBidWlsZGluZyBwcm9ibGVtcy4KKyogRml4IHByb2JsZW1zIHdpdGggSTJDIHN1cHBvcnQgZm9yIG1wYzUyMDAKIAotY29tbWl0IDNkZmE5Y2ZkY2VlNzhiMzBkYTM0MzIzMThiMzI4MjFmZmFiZTk3NGIKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CUZyaSBPY3QgMjAgMTc6MTY6MzUgMjAwNiAtMDUwMAorKiBBZGFwdCBUUkFCIGNvbmZpZ3VyYXRpb24gYW5kIGF1dG9fdXBkYXRlIHRvIG5ldyBtZW1vcnkgbGF5b3V0CiAKLSAgICBVc2UgZ2VuZXJpYyBJMkMgcmVnaXN0ZXIgYmxvY2sgb24gODV4eCBhbmQgODZ4eC4KKyogQWRkIGNvbmZpZ3VyYXRpb24gZm9yIHd0ayBib2FyZAogCi0gICAgUmVwbGFjZSBwcml2YXRlIElNTUFQIEkyQyBzdHJ1Y3R1cmVzIHdpdGggZ2VuZXJpYyByZWcgYmxvY2sKLSAgICBhbmQgYWxsb3cgODZ4eCB0byBoYXZlIG11bHRpcGxlIEkyQyBkZXZpY2UgYnVzc2VzLgorKiBBZGQgc3VwcG9ydCBmb3IgdGhlIFNoYXJwIExRMDY1VDlEUjUxVSBMQ0QgZGlzcGxheQogCi0gICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KKyogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDE3IFNlcCAyMDAzOgorICAtIEZpeGVzIGZvciBNUEM4MjY2IGRlZmF1bHQgY29uZmlnCisgIC0gQWxsb3cgZXRoX2xvb3BiYWNrX3Rlc3QoKSBvbiA4MjYwIHRvIHVzZSBhIHN1YnNldCBvZiB0aGUgRkNDJ3MKIAotY29tbWl0IGY1MDEyODI3ZGYxMWNhMGM5YmUxZGY1ZjhiMTUzZTE4OGRjMmZhN2MKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CUZyaSBPY3QgMjAgMTU6NTQ6MzQgMjAwNiAtMDUwMAorKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCAxNyBTZXAgMjAwMzoKKyAgLSB1cGRhdGUgUkVBRE1FIChTSE9XX0JPT1RfUFJPR1JFU1MgdmFsdWVzIGZvciBjbWRfbmFuZC5jIGFuZAorICAgIGVudl9jb21tb24uYykKKyAgLSBzYmM4MjYwIHR3ZWFrcworICAtIGFkanVzdCAiaGVscCIgb3V0cHV0CiAKLSAgICBGaXggY29tcGlsYXRpb24gd2FybmluZ3Mgb24gYSBmZXcgODV4eCBib2FyZHMuCisqIFBhdGNoZXMgYnkgQW5kZXJzIExhcnNlbiwgMTcgU2VwIDIwMDM6CisgIC0gZml4IHNwZWxsaW5nIGVycm9ycworICAtIHNldCBHRF9GTEdfREVWSU5JVCBmbGFnIG9ubHkgYWZ0ZXIgZGV2aWNlIGZ1bmN0aW9uIHBvaW50ZXJzCisgICAgYXJlIHZhbGlkCisgIC0gQWxsb3cgQ0ZHX0FMVF9NRU1URVNUIG9uIHN5c3RlbXMgd2hlcmUgYWRkcmVzcyB6ZXJvIGlzbid0CisgICAgd3JpdGVhYmxlCisgIC0gZW5hYmxlIDMucmQgVUFSVCAoU1QtVUFSVCkgb24gUFhBKFhTY2FsZSkgQ1BVcworICAtIHRyaWdnZXIgd2F0Y2hkb2cgd2hpbGUgd2FpdGluZyBpbiBzZXJpYWwgZHJpdmVyCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorKiBBZGQgYXV0by11cGRhdGUgY29kZSBmb3IgVFJBQiBib2FyZCB1c2luZyBVU0IgbWVtb3J5IHN0aWNrcywKKyAgc3VwcG9ydCBuZXcgY29uZmlndXJhdGlvbiB3aXRoIG1vcmUgbWVtb3J5CiAKLWNvbW1pdCAyMDQ3NjcyNjg0Y2Y4NWNiNmY5NmExZmJjOTkzMTgwYWFhZjE5YTk5Ci1BdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglGcmkgT2N0IDIwIDE1OjUwOjE1IDIwMDYgLTA1MDAKKyogZGlzYWJsZSBNUEM1MjAwIGJ1cyBwaXBlbGluaW5nIGFzIHdvcmthcm91bmQgZm9yIGJ1cyBjb250ZW50aW9uCiAKLSAgICBDb252ZXJ0ZWQgYWxsIDg1eHggYm9hcmRzIHRvIHVzZSBhIGNvbW1vbiBGU0wgSTJDIGRyaXZlci4KLSAgICBJbnRyb2R1Y2VkIENPRklHX0ZTTF9JMkMgdG8gc2VsZWN0IHRoZSBjb21tb24gRlNMIEkyQyBkcml2ZXIuCi0gICAgQW5kIHJlbW92ZWQgaGFyZCBpMmMgcGF0aCBmcm9tIGEgZmV3IHUtYm9vdC5sZHMgc2NpcHRzIHRvby4KLSAgICBNaW5vciB3aGl0ZXNwYWNlIGNsZWFudXBzIGFsb25nIHRoZSB3YXkuCisqIE1vZGlmeSBYTEIgYXJiaXRlciBwcmlvcml0aWVzIG9uIE1QQzUyMDAgc28gYWxsIGRldmljZXMgdXNlIHNhbWUKKyAgcHJpb3JpdHk7IGNvbmZpZ3VyZSBjcml0aWNhbCBpbnRlcnJ1cHRzIHRvIGJlIGhhbmRsZWQgbGlrZSBleHRlcm5hbAorICBpbnRlcnJ1cHRzCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorKiBNYWtlIElQQiBjbG9jayBvbiBNR1Q1MTAwL01QQzUyMDAgY29uZmlndXJhYmxlIGluIGJvYXJkIGNvbmZpZyBmaWxlOworICBnbyBiYWNrIHRvIDY2IE1IeiBmb3Igc3RhYmlsaXR5CiAKLWNvbW1pdCA0ZDQ1ZjY5ZTM2MmIwNTg5MmM5ZTkyYTc5MDdlNTgyMDk5NTYxMmFhCi1BdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUaHUgT2N0IDE5IDEyOjAyOjI0IDIwMDYgLTA1MDAKKyogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgMTUgU2VwIDIwMDM6CisgIC0gYWRkIGRlc2NyaXB0aW9uIGZvciBtaXNzaW5nIENGR19DTURfKiBlbnRyaWVzIGluIHRoZSBSRUFETUUgZmlsZQorICAtIHNhY3NuZyB0d2Vha3MKIAotICAgIFJld3JpdGUgYSBzZXJpZXMgb2YgZ290byBzdGF0ZW1lbnRzIGFzIGEgc2VxdWVuY2VzIG9mCi0gICAgY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMgaW5zdGVhZC4KKyogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAxNCBTZXAgMjAwMzoKKyAgZW5hYmxlIHdhdGNoZG9nIHN1cHBvcnQgZm9yIGFsbCBNUEM4MjR4IGJvYXJkcyB0aGF0IGhhdmUgYSB3YXRjaGRvZwogCi0gICAgVXNlIGNvbnNpc3RlbnQgcmV0dXJuIGNvZGUgMC8tMSBmb3IgZ29vZC9iYWQgaW5kaWNhdG9ycy4KKyogT24gTVBDNTIwMCwgcmVzdHJpY3QgRkVDIHRvIGEgbWF4aW11bSBvZiAxMCBNYnBzIHRvIHdvcmsgYXJvdW5kIHRoZQorICAiTm9uLW9jdGV0IEFsaWduZWQgRnJhbWUiIGVycm9ycyB3ZSBzZWUgYXQgMTAwIE1icHMKIAotICAgIEluY2x1ZGUgb25lIGZld2VyIGZpbGUgaWYgdGhlIGRyaXZlciBpc24ndCB1c2VkIGF0IGFsbC4KKyogUGF0Y2ggYnkgU2hhcmFkIEd1cHRhLCAxNCBTZXAgMjAwMzoKKyAgZml4IFNQUiBudW1iZXJzIGZvciB1cHBlciBCQVQgcmVnaXN0ZXIgKFtJRF1CQVRbNC03XVtVTF0pCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorKiBQYXRjaCBieSBsbGFuZHJlLCAxMSBTZXAgMjAwMzoKKyAgdXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIFBQQ2hhbWVsZW9uRVZCIGJvYXJkCiAKLWNvbW1pdCA3MjM3YzAzM2IwMmZlMjk1ODgwNDM1ZjFlYjgwODE5YTBjOTg3NTMyCi1BdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUaHUgT2N0IDE5IDExOjAyOjE2IDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAxMyBTZXAgMjAwMzoKKyAgdmFyaW91cyBjaGFuZ2VzIHRvIFZDTUE5IGJvYXJkIHNwZWNpZmljIGZpbGVzCiAKLSAgICBNb3ZlZCBpMmMgZHJpdmVyIG91dCBvZiBjcHUvbXBjODZ4eC9pMmMuYyBpbnRvIGRyaXZlcnMvZnNsX2kyYy5jCisqIEFkZCBJMkMgc3VwcG9ydCBmb3IgTUdUNTEwMCAvIE1QQzUyMDAKIAotICAgIGluIGFuIGVmZm9ydCB0byBiZWdpbiB0byB1bmlmeSB0aGUgdW1wdGVlbiBGU0wgSTJDIGRyaXZlcnMgdGhhdAotICAgIGFyZSBhbGwgb3RoZXJ3aXNlIHZlcnkgc2ltaWxhci4KKyogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDExIFNlcCAyMDAzOgorICBDaGFuZ2VkIGRlZmF1bHQgbWVtb3J5IG9wdGlvbiBvbiBNUEM4MjY2QURTIHRvIE5PVCBiZSBQYWdlIEJhc2VkCisgIEludGVybGVhdmUsIHNpbmNlIHRoaXMgZG9lc24ndCB3b3JrIHZlcnkgd2VsbCB3aXRoIHRoZSBzdGFuZGFyZAorICAxNk1CIERJTU0KIAotICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoIGJ5IEdlb3JnZSBHLiBEYXZpcywgMTIgU2VwIDIwMDM6CisgIGZpeCBNYWtlZmlsZSBzZXR0aW5ncyBmb3Igc2s5OCBkcml2ZXIKIAotY29tbWl0IDEzYTdmY2RmMzdmNmVhOTQyOWFlMDRjOWRmNjdmODkzMzY0Y2ZlNGIKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVRodSBPY3QgMTkgMTE6MzM6NTIgMjAwNiAtMDUwMAorKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEyIFNlcCAyMDAzOgorICAtIG5ldyBib2FyZHMgYWRkZWQ6IERQNDA1LCBIVUI0MDUsIFBMVTQwNSwgVk9INDA1CisgIC0gc29tZSBlc2QgYm9hcmRzIHVwZGF0ZWQKKyAgLSBjcHUvcHBjNHh4L3NkcmFtLmM6IGRpc2FibGUgbWVtb3J5IGNvbnRyb2xsZXIgYmVmb3JlIHNldHRpbmcKKyAgICBmaXJzdCB2YWx1ZXMKKyAgLSBjcHUvcHBjNHh4LzQwNV9wY2kuYzogc2V0IHZlbmRvciBpZCBvbiBQUEM0MDVFUCBzeXN0ZW1zCiAKLSAgICAqIEZpeCBhIGJ1bmNoIG9mIGNvbXBpbGVyIHdhcm5pbmdzIGZvciBnY2MgNC4wCisqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDExIFNlcCAyMDAzOgorICBhZGQgYnVybi1pbiB0ZXN0cyBmb3IgVFJBQiBib2FyZAogCi0gICAgU2lnbmVkLW9mZi1ieTogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KKyogRW5hYmxlIGluc3RydWN0aW9uIGNhY2hlIG9uIE1QQzUyMDAgYm9hcmQKIAotY29tbWl0IGFmOWUxZjViOWU2ZjljZTgxMGY1ZThiZjI5NjFjOTU0MmE1ODY1YzIKLUF1dGhvcjogU3RlZmFuIFJvZXNlIDxzckBkZW54LmRlPgotRGF0ZToJVHVlIE9jdCAxNyAwNjoxNDozMSAyMDA2ICswMjAwCisqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxMSBTZXAgMjAwMzoKKyAgLSBmaXggVVNCIGRhdGEgcG9pbnRlciBhc3NpZ25tZW50IGZvciBidWxrIG9ubHkgdHJhbnNmZXIuCisgIC0gcHJldmVudCB0byBkaXNwbGF5IGVyYXNlZCBkaXJlY3RvcmllcyBpbiBGQVQgZmlsZXN5c3RlbS4KIAotICAgIEFkZCBtb25pdG9yIGZ1bmN0aW9ucyBmb3IgaW5kaXJlY3QgYWNjZXNzIHRvIFBQQzQ0MCBEQ1IncwotICAgIFBhdGNoIGJ5IExlb25pZCBCYXJ5dWRpbiwgMTIgT2N0IDIwMDYKKyogQ2hhbmdlIG91dHB1dCBmb3JtYXQgZm9yIE5BTkQgZmxhc2ggLSBtYWtlIGl0IGxvb2sgbGlrZSBmb3Igb3RoZXIKKyAgbWVtb3J5LCB0b28KIAotY29tbWl0IDVmMzI0OWEwYTE2OGU0NDZhNGNjOTY2OWIyYmNlMGJjNDU2ZjBhMDkKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CUZyaSBPY3QgMTMgMTY6NDc6NTMgMjAwNiAtMDUwMAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC44OgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gICAgRml4ZWQgbGVhZGluZyB3aGl0ZXNwYWNlIGlzc3Vlcy4KLSAgICBSZW1vdmVkIHNwdXJpb3VzIExBV0FSIHRoaW5nLgorKiBBZGQgSTJDIGFuZCBSVEMgc3VwcG9ydCBmb3IgUk1VIGJvYXJkCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorKiBQYXRjaGVzIGJ5IERlbmlzIFBldGVyLCA5IFNlcCAyMDAzOgorICBhZGQgRkFUIHN1cHBvcnQgZm9yIElERSwgU0NTSSBhbmQgVVNCCiAKLWNvbW1pdCAwZWU5MGNiNzdlMDFkNmU4Y2NkMzdlMWJkOTY2Nzg1OTc4NzVjMzkxCi1BdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUaHUgT2N0IDEyIDEwOjQyOjM2IDIwMDYgLTA1MDAKKyogUGF0Y2hlcyBieSBHbGViIE5hdGFwb3YsIDIgU2VwIDIwMDM6CisgIC0gY2xlYW51cCBvZiBQT1NUIGNvZGUgZm9yIHVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMKKyAgLSBNUEM4MjR4IGxvY2tzIHdheTAgb2YgZGF0YSBjYWNoZSBmb3IgdXNlIGFzIGluaXRpYWwgUkFNOworICAgIHRoaXMgcGF0Y2ggdW5sb2NrcyBpdCBhZnRlciByZWxvY2F0aW9uIHRvIFJBTSBhbmQgaW52YWxpZGF0ZXMKKyAgICB0aGUgbG9ja2VkIGVudHJpZXMuCiAKLSAgICBSZW1vdmUgdW5uZWVkZWQgaW5jbHVkZSBmaWxlcyBhbmQgbG9jYWwgdmFyaWFibGUuCisqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMzAgQXVnIDIwMDM6CisgIG5ldyBJMkMgZHJpdmVyIGZvciBtcGMxMDcgYnJpZGdlLiBOb3cgd29ya3MgZnJvbSBmbGFzaC4KIAotICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoIGJ5IERhdmUgRWxsaXMsIDExIEF1ZyAyMDAzOgorICAtIEpGRlMyOiBmaXggdHlwbyBpbiBjb21tb24vY21kX2pmZnMyLmMKKyAgLSBKRkZTMjogZml4IENGR19KRkZTMl9TT1JUX0ZSQUdNRU5UUyBvcHRpb24KKyAgLSBKRkZTMjogcmVtb3ZlIG5vZGUgdmVyc2lvbiAwIHdhcm5pbmcKKyAgLSBKRkZTMjogYWNjZXB0IEpGRlMyIFBBRERJTkcgbm9kZXMKKyAgLSBTWE5JODU1VDogYWRkIEFNMjlMVjgwMCBzdXBwb3J0CisgIC0gU1hOSTg1NVQ6IG1vdmUgZW52aXJvbm1lbnQgZnJvbSBFRVBST00gdG8gZmxhc2gKKyAgLSBTWE5JODU1VDogYm9vdCBmcm9tIEpGRlMyIGluIE5PUiBvciBOQU5EIGZsYXNoCiAKLWNvbW1pdCAxZWFmM2E1ZmY0OTYwYTQ2ZjNhOTA2MzU2OGJhMmFmNzg4M2YwN2M1Ci1BdXRob3I6IEdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KLURhdGU6CVR1ZSBPY3QgMTAgMDA6MjM6MzIgMjAwNiAtMDYwMAorKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMTEgQXVnIDIwMDM6CisgIGZpeGVzIGZvciBJMkMgb24gTVBDODI0MAorICAtIGZpeCBpMmNfd3JpdGUgcm91dGluZQorICAtIGZpeCBpcHJvYmUgY29tbWFuZAorICAtIGVsaW1pbmF0ZXMgdXNlIG9mIGdsb2JhbCB2YXJpYWJsZXMsIHBsdXMgZGVhZCBjb2RlLCBjbGVhbnVwLgogCi0gICAgRml4IHBvc3NpYmxlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgY29tcGlsZXIgd2FybmluZy4KKyogQWRkIHN1cHBvcnQgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgRGV2aWNlcyAoQkJCKQorICAodGVzdGVkIHdpdGggVVNCIG1lbW9yeSBzdGlja3Mgb25seSkKIAotICAgIFdoZW4gQ09ORklHX09GX0ZMQUdfVFJFRSBpcyBzZXQsIHRoZSBjb21waWxlciBjb21wbGFpbnMgdGhhdCAnbGVuJyBpbgotICAgIGRvX2Jvb3RtX2xpbnV4KCkgbWF5IGJlIHVuaW5pdGlhbGl6ZWQuICBUaGVyZSBpcyBubyBwb3NzaWJpbGl0eSBpbiB0aGUKLSAgICBjdXJyZW50IGNvZGUgdGhhdCBsZW4gd2lsbCBnZXQgdXNlZCB1bmluaXRpYWxpemVkLCBidXQgdGhpcyBmaXggZm9sbG93cwotICAgIHRoZSBleGlzdGluZyBjb252ZW50aW9uIG9mIHNldHRpbmcgYm90aCBsZW4gYW5kIGRhdGEgdG8gemVybyBhdCB0aGUgc2FtZQotICAgIHRpbWUuCisqIEF2b2lkIGZsaWNrZXIgb24gVFJBQidzIFZGRAogCi0gICAgU2lnbmVkLW9mZi1ieTogR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgorKiBBZGQgc3VwcG9ydCBmb3IgU0s5OHh4IGRyaXZlcgogCi1jb21taXQgNzM3NmViODdhYWE2MDFmNzI4ZjliOGU1ZTljZDI3MTFhNjdmNTI5ZQotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIE9jdCAxMSAxNToxMzowMSAyMDA2IC0wNTAwCisqIEFkZCBQQ0kgc3VwcG9ydCBmb3IgU0w4MjQ1IGJvYXJkCiAKLSAgICAqIEZpeCBhIGJ1bmNoIG9mIGNvbXBpbGVyIHdhcm5pbmdzIGZvciBnY2MgNC4wCisqIFN1cHBvcnQgSWNlQ3ViZSBib2FyZCBjb25maWd1cmF0aW9ucyB3aXRoIDEgeCBBTUQgQU0yOUxWMDY1ICg4IE1CKQorICBvciAxIHggQU0yOUxWNjUyICh0d28gTFYwNjUgaW4gb25lIGNoaXAgPSAxNiBNQik7CisgIFJ1biBJUEIgYXQgMTMzIE1oejsgYWRqdXN0IHRoZSBNSUkgY2xvY2sgZnJlcXVlbmN5IGFjY29yZGluZ2x5CiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorKiBTZXQgQlJHX0NMSyBvbiBQTTgyNS84MjYgdG8gNjRNSHogKFZDT19PVVQgLyA0LCBpbnN0ZWFkIG9mIDE2CSBNSHopCisgIHRvIGFsbG93IGZvciBtb3JlIGFjY3VyYXRlIGJhdWRyYXRlIHNldHRpbmdzCisgIChlcnJvciBub3cgMC43JSBhdCAxMTUga2JwcywgaW5zdGVhZCBvZiAzLjUlIGJlZm9yZSkKIAotY29tbWl0IGJmNjUxYmFhMzY1ZTU0NDcyNDZhYWQ2YTYzM2NjZDY2N2NmMjRhMzkKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVdlZCBPY3QgMTEgMTA6MTA6NDMgMjAwNiAtMDUwMAorKiBQYXRjaCBieSBBbmRyZWFzIE1vaHIsIDQgU2VwIDIwMDM6CisgIEZpeCBhIGxvdCBvZiBzcGVsbGluZyBlcnJvcnMKIAotICAgIE1vdmUgImFyIiBmbGFncyB0byBjb25maWcubWsgdG8gYWxsb3cgZm9yIHNpbGVudCAibWFrZSAtcyIKKyogQWRkIHN1cHBvcnQgZm9yIFBQQ2hhbWVsZW9uIEV2YWwgQm9hcmQKIAotY29tbWl0IDFmZDU2OTlhNGEyNGY1YzFkYWIxYjMyZjQ4MGJhY2UxZWJiOWZjM2UKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVR1ZSBPY3QgMTAgMTc6MTk6MDMgMjAwNiAtMDUwMAorKiBBZGQgc3VwcG9ydCBmb3IgUDNHNCBib2FyZAogCi0gICAgQ29kaW5nIHN0eWxlIGNoYW5nZXMgdG8gcmVtb3ZlIGxvY2FsIHZhcmlibGUgYmxvY2tzCi0gICAgYW5kIHJlZm9ybWF0IGEgYml0IG5pY2VyLgorKiBGaXggcHJvYmxlbSB3aXRoIE1HVDUxMDAgRkVDIGRyaXZlcjogYWRkICJlYXJseSIgTUFDIGFkZHJlc3MKKyAgaW5pdGlhbGl6YXRpb24KIAotY29tbWl0IDhiMjgzZGJiM2EwOGQxYjhkNDA2YmMxNWYxMTllMDgxYjNlMjYwNmEKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVR1ZSBPY3QgMTAgMTc6MTY6MDQgMjAwNiAtMDUwMAorKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCA3IEF1ZyAyMDAzOgorICBjaGVjayBCQ1NSIHRvIGRldGVjdCBpZiB0aGUgYm9hcmQgaXMgY29uZmlndXJlZCBpbiBQQ0kgbW9kZQogCi0gICAgRml4IHdoaXRlc3BhY2UgaXNzdWVzLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC43OgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1jb21taXQgN2IzODJiNzEyNWYyMzk3Y2NlNjMyNTNkZjYyZjE4M2UzZGZhMjc3MAotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgotRGF0ZToJVHVlIE9jdCAxMCAxNzoxNDo0NSAyMDA2IC0wNTAwCisqIFBhdGNoIGJ5IFJhZ2h1IEtyaXNobmFwcmFzYWQsIDcgQXVnIDIwMDM6CisgIGFkZCBzdXBwb3J0IGZvciBBZGRlciBJSSBNUEM4NTJUIG1vZHVsZQogCi0gICAgRml4IHdoaXRlc3BhY2UgaXNzdWVzLgorKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDE5IEF1ZyAyMDAzOgorICBmaXggVEkgSW5ub3ZhdG9yL09NQVAxNTEwIHBpbiBjb25maWdzCiAKLWNvbW1pdCBlMTAzOTBkZGQ3MzZiMGRhZDE1MjhlZWM0YjBmZTM1YzA4MjcxMzlhCi1BdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUdWUgT2N0IDEwIDE3OjA2OjUzIDIwMDYgLTA1MDAKKyogUGF0Y2hlcyBieSBLc2hpdGlqLCAxOCBBdWcgMjAwMworICAtIGFkZCBzdXBwb3J0IGZvciBhcm05MjZlanMgY3B1IGNvcmUKKyAgLSBhZGQgc3VwcG9ydCBmb3IgVEkgT01BUCAxNjEwIElubm92YXRvciBCb2FyZAogCi0gICAgRml4IHdoaXRlc3BhY2UgaXNzdWVzLgorKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNCBBdWcgMjAwMzoKKyAgYWRkIHN1cHBvcnQgZm9yIGJ6aXAyIHVuY29tcHJlc3Npb24KIAotY29tbWl0IDg5ODc1ZTk2YmEzZjAyMzE1N2JmNTBkNWY4ZTMzYmYyNTQ5NjRhNzYKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVR1ZSBPY3QgMTAgMTc6MDM6NDMgMjAwNiAtMDUwMAorKiBBZGQgR0NDIGxpYnJhcnkgdG8gZXhhbXBsZXMvTWFrZWZpbGUgc28gR0NDIHV0aWxpdHkgZnVuY3Rpb25zIHdpbGwKKyAgYmUgcmVzb2x2ZWQsIHRvbwogCi0gICAgUmFuIGxpbmRlbnQgYW5kIGNsZWFuZWQgdXAgd2hpdGVzcGFjZSBpc3N1ZXMuCi0gICAgRm9ybWF0IGZvciA4MC1jb2x1bW5zIHRvby4KKyogQWRkIEkyQyBhbmQgUlRDIHN1cHBvcnQgZm9yIFJNVSBib2FyZCB1c2luZyBzb2Z0d2FyZSBJMkMgZHJpdmVyCisgIChiZWNhdXNlIG9mIGJldHRlciByZXNwb25zZSB0byBpcHJvYmUgY29tbWFuZCk7IGZpeCBwcm9ibGVtIHdpdGgKKyAgInJlc2V0IiBjb21tYW5kCiAKLWNvbW1pdCAzMzM5NjFhZTcwOTVmYzY2ZDhhMDQxZmNlMWFjOWVlODczYjA5ZDg2Ci1BdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUdWUgT2N0IDEwIDE3OjAyOjIyIDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI4IEF1ZyAyMDAzOgorICBBZGRlZCBDT05GSUdfQk9PVFBfRE5TMiBhbmQgQ09ORklHX0JPT1RQX1NFTkRfSE9TVE5BTUUgdG8KKyAgQ09ORklHX0JPT1RQX01BS1MgKHNlZSBSRUFETUUpLgogCi0gICAgRml4IHdoaXRlc3BhY2UgYW5kIDgwLWNvbCBpc3N1ZXMuCisqIEZpeCBJQ1U4NjIgZW52aXJvbm1lbnQgcHJvYmxlbQogCi1jb21taXQgZjU1ZGYxODE4N2U3YTQ1Y2I3M2ZlYzQzNzBkMTIxMzVlNjY5MWFlMQotQXV0aG9yOiBKb2huIFRyYWlsbCA8am9obi50cmFpbGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CUZyaSBTZXAgMjkgMDg6MjM6MTIgMjAwNiArMDEwMAorKiBGaXggUkFNIHNpemUgZGV0ZWN0aW9uIGZvciBSTVUgYm9hcmQKIAotICAgIEZpeCBtaXNzaW5nIHRDeWNsZS9tb2RmcmVxIGNhbGN1bGF0aW9uLgorKiBJbXBsZW1lbnQgInJlc2V0IiBmb3IgTUdUNTEwMC9NUEM1MjAwIHN5c3RlbXMKIAotICAgIFNpZ25lZC1vZmYtYnk6IEpvaG4gVHJhaWxsIDxqb2huLnRyYWlsbEBmcmVlc2NhbGUuY29tPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC42OgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1jb21taXQgODI3MmRjMmY1OGYyNDczZDg5OTVmY2M5YjkxNjQ0MGNmYmEwODBmMAotQXV0aG9yOiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglXZWQgU2VwIDEzIDEwOjMzOjM1IDIwMDYgLTA1MDAKKyogTWFrZSBFdGhlcm5ldCBhdXRvbmVnb3RpYXRpb24gb24gSU5DQS1JUCB3b3JrIGZvciBhbGwgY2xvY2sgcmF0ZXM7CisgIGFsbG93IHNlbGVjdGlvbiBvZiBjbG9jayBmcmVxdWVuY3kgYXMgIm1ha2UiIHRhcmdldAogCi0gICAgVXBkYXRlZCBjb25maWcgaGVhZGVycyB0byBhZGQgZGVmYXVsdCBGRFQtYmFzZWQgYm9vdGluZworKiBJbXBsZW1lbnQgbWVtb3J5IGF1dG9zaXppbmcgY29kZSBmb3IgSWNlQ3ViZSBib2FyZHMKIAotY29tbWl0IDA5ZjNlMDllOWViY2ZhNzkxOWNhODkzMWE0YjU1MDRmYWRkMWYxZDMKLUF1dGhvcjogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIFNlcCAxMyAxMDozNDoxOCAyMDA2IC0wNTAwCisqIENvbmZpZ3VyZSBuZXR3b3JrIHBvcnQgb24gSU5DQS1JUCBmb3IgYXV0b25lZ290aWF0aW9uCiAKLSAgICBBZGQgc3VwcG9ydCBmb3IgZVRTRUMgMyAmIDQgb24gODU0OCBDRFMKKyogRml4IG92ZXJmbG93IHByb2JsZW0gaW4gbmV0d29yayB0aW1lb3V0IGNvZGUKIAotICAgICogQWRkZWQgc3VwcG9ydCBmb3IgdXNpbmcgZVRTRUMgMyBhbmQgZVRTRUMgNCBvbiB0aGUgODU0OCBDRFMuCi0gICAgICBUaGlzIHdpbGwgb25seSB3b3JrIG9uIHJldiAxLjMgYm9hcmRzIChidXQgZG9lc24ndCBicmVhayBvbGRlciBib2FyZHMpCi0gICAgKiBDbGVhbmVkIHVwIHNvbWUgY29tbWVudHMgdG8gcmVmbGVjdCB0aGUgZXhwYW5kZWQgcm9sZSBvZiB0c2VjCi0gICAgICBpbiBvdGhlciBzeXN0ZW1zCisqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDggQXVnIDIwMDM6CisgIEFsbG93IGNyYzMyIHRvIGJlIHVzZWQgYXQgYWRkcmVzcyAweDAwMCAoY3JjMzJfbm9fY29tcCwgdG9vKS4KIAotY29tbWl0IDA4NGQ2NDhiMTA5Yzg5ODRmODM2NzQwNDNjMWE3ZmEzODg1ZWY4MDEKLUF1dGhvcjogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIFNlcCAxMyAxMDozMzo1NiAyMDA2IC0wNTAwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSAgICBBZGRlZCBjb2RlIHRvIHN1cHBvcnQgMi42LjE4IFBDSSBjaGFuZ2VzIGluIHUtYm9vdAorKiBVcGRhdGUgZm9yIFRRTSBib2FyZCBkZWZhdWx0czoKKyAgZGlzYWJsZSBjbG9ja3NfaW5fbWh6LCBlbmFibGUgYm9vdCBjb3VudCBsaW1pdAogCi0gICAgKiBBZGRlZCBjb2RlIHRvIHN3aXp6bGUgdGhlIElSUSBtYXAgZm9yIHRoZSBQQ0kKKyogUmVtb3ZlZCB0b29scy9nZGIgZnJvbSAibWFrZSBhbGwiIHRhcmdldC4gIEFkZGVkIG1ha2UgdGFyZ2V0ICJnZGJ0b29scyIKKyAgaW4gdG9wbGV2ZWwgZGlyZWN0b3J5IGluc3RlYWQuICBSZW1vdmVkIGFzdGVzdC5jIGZyb20gdG9vbHMvZ2RiIGJlY2F1c2UKKyAgaXQgaXMgbm8gbG9uZ2VyIHJlbGV2YW50LgogCi1jb21taXQgYWZiZGM2NDlmODc1MWU0ZjRmMWE2ZjUyN2VkZmUxMzk3NzNmMmMxNQotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgotRGF0ZToJVHVlIFNlcCAxOSAwOTozNDoxMCAyMDA2IC0wNTAwCisqIEZpeCBQQ0kgc3VwcG9ydCBmb3IgTVBDNTIwMCAvIEljZUN1YmUgQm9hcmQKIAotICAgIE1vZGlmaWVkIG1ha2VmaWxlIGZvciBuZXcgYnVpbGQgbWVjaGFuaXNtLgorKiBNYXAgSVNQMTM2MiBVU0IgT1RHIGNvbnRyb2xsZXIgZm9yIE5TQ1UgYm9hcmQKIAotICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoIGJ5IEJyYWQgUGFya2VyLCAwMiBBdWcgMjAwMzoKKyAgZml4IHNjNTIwX2NkcCBwcm9ibGVtcwogCi1jb21taXQgZDE0YmE2YTc5OGJlYjc1M2U3YTg2NDUwMDQxNGZjYzJkMTk4YjhiYwotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgotRGF0ZToJVGh1IFNlcCAxNCAwODo0MDozNiAyMDA2IC0wNTAwCisqIEltcGxlbWVudCBCb290IEN5Y2xlIERldGVjdGlvbiAoUmVxLiAyLjMgb2YgT1NETCBDR0wgUmVxaXJlbWVudHMpCiAKLSAgICBIYW5kbGUgODZ4eCBTVlIgdmFsdWVzIGFjY29yZGluZyB0byB0aGUgbmV3IFJlZmVyZW5jZSBNYW51YWwuCi0gICAgQm90aCA4NjQxIGFuZCA4NjQxRCBoYXZlIFNWUiA9PSAweDgwOTAsIGFuZCBhcmUgZGlzdGluZ3Vpc2hlZAotICAgIGJ5IHRoZSBieXRlIGluIGJpdHMgMTYtMjMgaW5zdGVhZC4KLSAgICBUaGFua3MgdG8gSmFzb24gSmluIGZvciBub3RpY2luZy4KKyogQWxsb3cgZXJhc2UgY29tbWFuZCB0byBjcm9zcyBmbGFzaCBiYW5rIGJvdW5kYXJpZXMKIAotICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoIGJ5IFNjb3R0IE1jTnV0dCwgMjEgSnVsIDIwMDM6CisgIEFkZCBzdXBwb3J0IGZvciBMeW51eFdvcmtzIEtlcm5lbCBEb3dubG9hZGFibGUgSW1hZ2VzIChLRElzKS4KKyAgQm90aCBMeW54T1MgYW5kIEJsdWVDYXQgbGludXggS0RJcyBhcmUgc3VwcG9ydGVkLgogCi1jb21taXQgODhjOGY0OTIxZmM0N2ZiMGViMjM4NGIxNjU4NmYxYmQ3ZjI3NWJlNwotQXV0aG9yOiBaaGFuZyBXZWkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgotRGF0ZToJTW9uIEF1ZyAyOCAxNDoyNTozMSAyMDA2ICswODAwCisqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDI1IEp1bCAyMDAzOgorICB1c2UgbW9yZSByZWxpYWJsZSByZXNldCBmb3IgT01BUC85MjVUCiAKLSAgICBGaXhlZCBhbiBPRi10cmVlIG9mZi1ieS1vbmUgYnVnIHdoZW4gYWRkaW5nIGEgbmV3IHByb3BlcnR5IG5hbWUuCi0gICAgVGhpcyBidWcgd2lsbCBjYXVzZSB0aGUga2VybmVsIGJvb3RpbmcgdG8gcGF1c2UgYSBsb25nIHRpbWUuCisqIFBhdGNoIGJ5IE55ZSBMaXUsIDI1IEp1bCAyMDAzOgorICBmaXggdHlwbyBpbiBtcGM4eHguaAogCi0gICAgU2lnbmVkLW9mZi1ieTogWmhhbmcgV2VpIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KLSAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIDJmMTU3NzZjY2M2ZGMzMjM3N2Q4YmE5NjUyYjhmNTgwNTljMjdjNmQgY29tbWl0KQorKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAyNCBKdWwgMjAwMzoKKyAgRml4ZXMgZm9yIGNtZF9uYW5kLmM6CisgIC0gRml4ZWQgbnVsbCBkZXJlZmVyZWNlIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBpbmNvcnJlY3QgRUNDIHZhbHVlcy4KKyAgLSBBZGRlZCBzdXBwb3J0IGZvciBkZXZpY2VzIHdpdGggbm8gUmVhZHkvQnVzeSBzaWduYWwgaG9va2VkIHVwLgorICAtIEFkZGVkIE9NQVAxNTEwIHJlYWQvd3JpdGUgcHJvdGVjdCBoYW5kbGluZy4KKyAgLSBGaXhlZCBuYW5kLmgncyBFQ0NQT1MuIEEgY29uZmxpY3QgZXhpc3RlZCB3aXRoIFBPUzUgYW5kIGJhZGJsb2NrCisgICAgZm9yIG5vbi1KRkZTMi4KKyAgLSBTd2l0Y2hlZCBkZWZhdWx0IEVDQyB0byBiZSBKRkZTMi4KIAotY29tbWl0IDliZmY3YTY5YTg4NWFkZWJiZDJiZDQ1OTkwNDk0ZWM0Y2Y5OThhMzAKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVR1ZSBBdWcgMjkgMTE6MDU6MDkgMjAwNiAtMDUwMAorKiBBbGxvdyBjcmMzMiB0byBiZSB1c2VkIGF0IGFkZHJlc3MgMHgwMDAKIAotICAgIFJlbW92ZSB0cmFpbGluZyBlbXB0eSBsaW5lcy4KKyogUHJvdmlkZSBjb25zaXN0ZW50IGludGVyZmFjZSB0byBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucyB0byBhY2Nlc3MKKyAgdGhlICdnbG9iYWxfZGF0YScgc3RydWN0dXJlCisgIFByb3ZpZGUgYSBkb2MvUkVBRE1FLnN0YW5kYWxvbmUgbW9yZSB1c2VmdWwgdG8gdXNlcnMvZGV2ZWxvcGVycy4KIAotY29tbWl0IGNkNmQ3M2Q1Yjg5NWE1OTM1YWM0ZmRlMGEzNTYyODgxNDJhNTg0ZTAKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVR1ZSBBdWcgMjkgMDk6NDg6NDkgMjAwNiAtMDUwMAorKiBNYWtlIEljZUN1YmUgTUdUNTEwMCBGRUMgZHJpdmVyIHdvcmsKIAotICAgIFJlbW92ZSBib2d1cyBtc3luYyBhbmQgdXNlIHZvbGF0aWxlIGFzbS4KKyogSW1wbGVtZW50IG5ldyBtZWNoYW5pc20gdG8gZXhwb3J0IFUtQm9vdCdzIGZ1bmN0aW9ucyB0byBzdGFuZGFsb25lCisgIGFwcGxpY2F0aW9uczogaW5zdGVhZCBvZiB1c2luZyAoUFBDLXNwZWNpZmljKSBzeXN0ZW0gY2FsbHMgd2Ugbm93CisgIHVzZSBhIGp1bXAgdGFibGU7IHBsZWFzZSBzZWUgZG9jL1JFQURNRS5zdGFuZGFsb25lIGZvciBkZXRhaWxzCiAKLWNvbW1pdCA3NzhkNDUwNDljZTU5MjdiNjViM2ZmMWQ4ZTY2OTJiNjU0YmRkNDllCi1BdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUdWUgQXVnIDI5IDA4OjE3OjE0IDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgRGF2ZSBXZXN0d29vZCwgMjQgSnVsIDIwMDM6CisgIGFkZGVkIHN1cHBvcnQgZm9yIFVuaXR5IE9TIChhIHByb3ByaWV0YXJ5IE9TKQogCi0gICAgQWRkIG15c2VsZiBhcyBtYWludGFpbmVyIGZvciBNUEM4NjQxSFBDTi4KKyogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjMgSnVsIDIwMDM6CisgIGFkZCAiaW1scyIgY29tbWFuZCB0byBwcmludCBmbGFzaCB0YWJsZSBvZiBjb250ZW50cwogCi1jb21taXQgMmYxNTc3NmNjYzZkYzMyMzc3ZDhiYTk2NTJiOGY1ODA1OWMyN2M2ZAotQXV0aG9yOiBaaGFuZyBXZWkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgotRGF0ZToJTW9uIEF1ZyAyOCAxNDoyNTozMSAyMDA2ICswODAwCisqIEZpeCBjb2xkIGJvb3QgZGV0ZWN0aW9uIGZvciBsb2cgYnVmZmVyIHJlc2V0CiAKLSAgICBGaXhlZCBhbiBPRi10cmVlIG9mZi1ieS1vbmUgYnVnIHdoZW4gYWRkaW5nIGEgbmV3IHByb3BlcnR5IG5hbWUuCi0gICAgVGhpcyBidWcgd2lsbCBjYXVzZSB0aGUga2VybmVsIGJvb3RpbmcgdG8gcGF1c2UgYSBsb25nIHRpbWUuCisqIFJldHVybiBlcnJvciBmb3IgaW52YWxpZCBsZW5ndGggc3BlY2lmaWVycyB3aXRoICJjcC5YIiBldGMuCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBaaGFuZyBXZWkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgorKiBGaXggc3RhcnR1cCBwcm9ibGVtIG9uIE1JUFMKIAotY29tbWl0IDU1Njc4MDZiNjdkMGFlODM0OTNhYTg4MjNhZDNiNmM5MTRmNTgxZDcKLUF1dGhvcjogSGFpeWluZyBXYW5nIDxoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbT4KLURhdGU6CUZyaSBBdWcgMjUgMTQ6Mzg6MzQgMjAwNiAtMDQwMAorKiBBbGxvdyBmb3IgQ09ORklHX1NQTEFTSF9TQ1JFRU4gZXZlbiB3aGVuIG5vIGV4cGxpY2l0CisgIGJpdG1hcCBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQKIAotICAgIENoYW5nZSByYW1kaXNrYWRkciBhbmQgZHRiYWRkcgotICAgIFJlbW92ZSBQRVggZmx1ZmYgY29tbWFuZHMuCisqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAxOCBKdWwgMjAwMzoKKyAgLSBmaXggZW5kaW5hbmVzcyBwcm9ibGVtIGluIGNwdS9tcGM4MjR4L2RyaXZlcnMvaTJjL2kyYzEuYwogCi0gICAgU2lnbmVkLW9mZi1ieTogSGFpeWluZyBXYW5nIDxoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbT4KLSAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTggSnVsIDIwMDM6CisgIC0gZml4IG1lbW9yeSBjb25maWd1cmF0aW9uIGZvciBNSVA0MDVUCisgIC0gZml4IHByaW50b3V0IG9mIGJhdWRyYXRlIGZvciAibG9hZGIgPGxvYWRhZGRyPiA8YmF1ZHJhdGU+IgogCi1jb21taXQgYjJiNzg0MjFkOWRiNDljMjFhODIxYWY4YTE5YzIxYzFmN2RmYjI5ZQotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIEF1ZyAyMyAxMzozMjo0NSAyMDA2IC0wNTAwCisqIENsZWFudXAgb2YgVFFNODJ4eCBjb25maWd1cmF0aW9uczsgdXNlICJvZmZpY2lhbCIgYm9hcmQgdHlwZXMKKyAgdG8gbWFrZSBzZWxlY3Rpb24gZWFzaWVyLgogCi0gICAgKiBBbm90aGVyIHNtYWxsIGZpeCBmb3IgYm9vdGluZyB3aXRoIGRpc2FibGVfb2YKKyogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMTcgSnVsIDIwMDM6CisgIGFkZCBkZWxheSB0byBnZXQgSTJDIHdvcmtpbmcgd2l0aCAiaW1tIiBjb21tYW5kIGFuZCBzM2MyNHgwX2kyYy5jCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxNyBKdWx5IDAzOgorICAtIEZpeGVkIGJ1ZyBpbiBPTUFQMTUxMCBiYXVkIHJhdGUgZGl2aXNvciBzZXR0aW5ncy4KIAotY29tbWl0IDRhN2NjMGYyMTkxOGU2ZWNmMDdlZDU3MDc1ZDY3ZGYyYzRhMTI5OWMKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVdlZCBBdWcgMjMgMTE6MDQ6NDMgMjAwNiAtMDUwMAorKiBQYXRjaCBieSBOeWUgTGl1LCAxNiBKdWx5IDIwMDM6CisgIE1QQzg2MEZBRFMgZml4ZXM6CisgIC0gYWRkIE1QQzg2eEFEUyBzdXBwb3J0ICh1c2VzIE1QQzg2eEFEUy5oKQorICAtIGFkZCA4NjZQL1QgY29yZSBzdXBwb3J0IChhbHNvIE1QQzg1OVQvTVBDODU5RFNML01QQzg1MlQpCisgICAgbyBQTFBSQ1IgY2hhbmdlcworICAgIG8gQlJHIGNoYW5nZXMgKEVYVEFML1hUQUwgcmVzdHJpY3RlZCB0byAxME1IeikKKyAgICBvIGRvbid0IHRydXN0IGdjbGsoKSBzb2Z0d2FyZSBtZWFzdXJlbWVudCBieSBkZWZhdWx0LCBkZXBlbmQgb24KKyAgICAgIENPTkZJR184eHhfR0NMS19GUkVRCisgIC0gYWRkIERSQU0gU0lNTSBub3QgaW5zdGFsbGVkIGRldGVjdGlvbgorICAtIHVzZSBtb3JlICJjb3JyZWN0IiBTRFJBTSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZQorICAtIGFsbG93IGRpZmZlcmVudCBTRFJBTSBzaXplcyAoOHh4QURTIGhhcyA4TSkKKyAgLSBkZWZhdWx0IERFUiBpcyAwCisgIC0gcmVtb3ZlIHVudXNlZCBNQU1SIGRlZmluZXMgZnJvbSBGQURTODYwVC5oIChhbGwgZG9uZSBpbiBmYWRzLmMpCisgIC0gcmVuYW1lIE1BTVIvTUJNUiBkZWZpbmVzIHRvIGJlIG1vcmUgY29uc2lzdGVudC4gU2hvdWxkIGV2ZW50dWFsbHkKKyAgICBiZSBtZXJnZWQgaW50byBNeE1SIHRvIGJldHRlciByZWZsZWN0IHRoZSBQb3dlclFVSUNDIGRhdGFzaGVldC4KIAotICAgIENsZWFudXAgYW5kIGxpbmRlbnQgbmV3IEFIQ0kgZHJpdmVyLgorKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAxNiBKdWwgMjAwMzoKKyAgc3VwcG9ydCBuZXcgTW90b3JvbGEgUFEyRkFEUy1aVSBldmFsdWF0aW9uIGJvYXJkIHdoaWNoIHJlcGxhY2VkCisgIE1QQzgyNjBBRFMgYW5kIE1QQzgyNjZBRFMKIAotY29tbWl0IGRhYmY5ZWY4YzEwYjRkZWFkNWVmMjEwNmVmNzQyYjFjMDZiNTQyZGUKLUF1dGhvcjogSmluIFpoZW5neGlvbmcgPGphc29uQGJ1cy5hcC5mcmVlc2NhbGUubmV0PgotRGF0ZToJV2VkIEF1ZyAyMyAxOToxNToxMiAyMDA2ICswODAwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjQ6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSAgICBBZGQgQUhDSSBkZWZpbmUgYW5kIHNhdGEgc3VwcG9ydCBmb3IgTVBDODY0MUhQQ04gYm9hcmQuCisqIEFkZCBzdXBwb3J0IGZvciBJY2VDdWJlIGJvYXJkICh3aXRoIE1HVDUxMDAgYW5kIE1QQzUyMDAgQ1BVcykKIAotICAgIFNpZ25lZC1vZmYtYnk6SmFzb24gSmluPGphc29uLmppbkBmcmVlc2NhbGUuY29tPgorKiBBZGQgc3VwcG9ydCBmb3IgTUdUNTEwMCBhbmQgTVBDNTIwMCBwcm9jZXNzb3JzCiAKLWNvbW1pdCA0NzgyYWM4MGIwMmYwZDAxYWZkMzA5ZTIyMDBkZDNjNzAzN2YyYmE0Ci1BdXRob3I6IEppbiBaaGVuZ3hpb25nIDxqYXNvbkBidXMuYXAuZnJlZXNjYWxlLm5ldD4KLURhdGU6CVdlZCBBdWcgMjMgMTk6MTA6NDQgMjAwNiArMDgwMAorKiBQYXRjaCBieSBMdXR6IERlbm5pZywgMTUgSnVsIDIwMDM6CisgIHVwZGF0ZSBmb3IgUjM2ME1QSSBib2FyZAogCi0gICAgQWRkIEFIQ0kgc3VwcG9ydCB0byB1LWJvb3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMzoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotICAgIEFkZCBBSENJIHN1cHBvcnQgaW4gdS1ib290LCBlbmFibGUgdGhlIHNhdGEgZGlzayBjb250cm9sbGVycyB3aGljaAotICAgIGZvbGxvd2luZyB0aGUgQUhDSSBwcm90b2NvbC4KKyogUGF0Y2hlcyBieSBLc2hpdGlqLCAwNCBKdWwgMjAwMworICAtIGFkZGVkIHN1cHBvcnQgZm9yIGFybTkyNXQgY3B1IGNvcmUKKyAgLSBhZGRlZCBzdXBwb3J0IGZvciBUSSBPTUFQIDE1MTAgSW5ub3ZhdG9yIEJvYXJkCiAKLSAgICBTaWduZWQtb2ZmLWJ5Okphc29uIEppbjxqYXNvbi5qaW5AZnJlZXNjYWxlLmNvbT4KKyogUGF0Y2hlcyBieSBNYXJ0aW4gS3JhdXNlLCAxNCBKdWwgMjAwMzoKKyAgLSBhZGQgSTJDIHN1cHBvcnQgZm9yIHMzYzI0MDAgc3lzdGVtcyAodHJhYiBib2FyZCkKKyAgLSAocmUtKSBhZGQgInBpbmciIHRvIGNvbW1hbmQgdGFibGUKIAotY29tbWl0IGQ4ZWEyYWNmNWYxMzdjYWU5OTQxN2RmNGY1NzNkMDM2ZWUzODQ2NjgKLUF1dGhvcjogWmhhbmcgV2VpIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVdlZCBBdWcgMjMgMTc6NTQ6MzIgMjAwNiArMDgwMAorKiBGaXggaGFuZGxpbmcgb2YgInNsb3ciIFBPU1Qgcm91dGluZXMKIAotICAgIEFkZCBkdGIgYm9vdC11cCBwYXJhbWV0ZXIgdG8gZGVmYXVsdCBib290IGNvbW1hbmRzLgorKiBQYXRjaGVzIGJ5IFl1bGkgQmFyY29oZW4sIDEzIEp1bCAyMDAzOgorICAtIENvcnJlY3QgZmxhc2ggYW5kIEpGRlMyIHN1cHBvcnQgZm9yIE1QQzgyNjBBRFMKKyAgLSBmaXggUFZSIHZhbHVlcyBhbmQgY2xvY2sgZ2VuZXJhdGlvbiBmb3IgUG93ZXJRVUlDQyBJSSBmYW1pbHkKKyAgICAoODI3MC84Mjc1LzgyODApCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBaaGFuZyBXZWkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgorKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAwOCBKdWwgMjAwMzoKKyAgLSBhZGQgc3VwcG9ydCBmb3IgTTY4SyB0YXJnZXRzCiAKLWNvbW1pdCBiOTM3NzVjMjAzNmI5OWJhYTM5MGVhNDI1YzQ3NzE4OTViYmM2M2M0Ci1BdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUdWUgQXVnIDIyIDE4OjI2OjA4IDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgS2VuIENob3UsIDMgSnVsOgorICAtIEZpeCBQQ0kgY29uZmlnIHRhYmxlIGZvciBBMzAwMAorICAtIEZpeCBpb2Jhc2UgZm9yIG5hdHNlbWkuYworICAgIChQQ0lfQkFTRV9BRERSRVNTXzAgaXMgdGhlIElPIGJhc2UgcmVnaXN0ZXIgZm9yIERQODM4MTUpCiAKLSAgICBDbGVhbnVwIGV2ZW4gbW9yZSBwb29ybHkgaW50cm9kdWNlZCB3aGl0ZXNwYWNlLgorKiBBbGxvdyB0byBlbmFibGUgInNsb3ciIFBPU1Qgcm91dGluZXMgYnkga2V5IHByZXNzIG9uIHBvd2VyLW9uCisqIEZpeCB0ZW1wZXJhdHVyZSBkZXBlbmRlbmQgc3dpdGNoaW5nIG9mIExDRCBiYWNrbGlnaHQgb24gTFdNT04KKyogVHdlYWsgb3V0cHV0IGZvcm1hdCBmb3IgTFdNT04KIAotY29tbWl0IGFlNjI0MTY4NWNiY2YwYzc5YTM2MzY1MzBkMmNlYWIxZmIyOTFhOTQKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVR1ZSBBdWcgMjIgMTg6MDc6MDAgMjAwNiAtMDUwMAorKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEp1bCAyMDAzOgorICAtIEZpeCBidWcgaW4gQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUuCisgIC0gQVI0MDUgY29uZmlnIHVwZGF0ZWQuCisgIC0gT0NSVEMvT1JTRzogYnNwIGNvbW1hbmQgYWRkZWQuCisgIC0gQVNINDA1IGJzcCB1cGRhdGUuCiAKLSAgICBDbGVhbnVwIG1vcmUgcG9vcmx5IGludHJvZHVjZWQgd2hpdGVzcGFjZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMjoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotY29tbWl0IDJjMzNlOGExYzUzNWIzYWU5MWNmMGIyODQ0ODA2MDBiZjNmNTdjNTcKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVR1ZSBBdWcgMjIgMTc6NTQ6MDUgMjAwNiAtMDUwMAorKiBBZGQgc3VwcG9ydCBmb3IgTlNDVSBib2FyZAogCi0gICAgQ2xlYW51cCBwb29ybHkgaW50cm9kdWNlZCB3aGl0ZXNwYWNlLgorKiBBZGQgc3VwcG9ydCBmb3IgVFFNODIzTSwgVFFNODUwTSwgVFFNODU1TSBhbmQgVFFNODYwTSBtb2R1bGVzCiAKLWNvbW1pdCA4MGU5NTVjN2RkOThmNGI0ZmQyM2MyMTEzY2FmNzVlZDJiNzdiNWIzCi1BdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUdWUgQXVnIDIyIDEyOjI1OjI3IDIwMDYgLTA1MDAKKyogQWRkIHN1cHBvcnQgZm9yIEFtMjlMVjE2ME1MLCBBbTI5TFYzMjBNTCwgYW5kIEFtMjlMVjY0ME1MCisgIG1pcnJvciBiaXQgZmxhc2ggb24gVFFNOHh4TSBtb2R1bGVzCiAKLSAgICBHZW5lcmFsIGluZGVudCBhbmQgd2hpdGVzcGFjZSBjbGVhbnVwcy4KKyogUGF0Y2ggYnkgS2VubmV0aCBKb2hhbnNzb24sIDMwIEp1biAyMDAzOgorICBnZXQgcmlkIG9mIE1LX0NNRF9FTlRSWSBtYWNybzsgdXBkYXRlIGRvYy9SRUFETUUuY29tbWFuZAogCi1jb21taXQgZmZmZjNhZTU2ZjU4NDJjYTM2NzllNGNlNzkyMmI4MTlhODdhYWQ5ZgotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgotRGF0ZToJVHVlIEF1ZyAyMiAxMjowNjoxOCAyMDA2IC0wNTAwCisqIFBhdGNoIGJ5IFNlYiBKYW1lcywgMzAgSnVuIDIwMDM6CisgIEltcHJvdmUgZG9jdW1lbnRhdGlvbiBvZiBJMkMgY29uZmlndXJhdGlvbiBpbiBSRUFETUUKIAotICAgIEdlbmVyYWwgaW5kZW50IGFuZCB3aGl0ZXNwYWNlIGNsZWFudXBzLgorKiBGaXggcHJvYmxlbXMgd2l0aCBwcmV2aW91cyBsb2cgYnVmZmVyICJmaXhlcyIKIAotY29tbWl0IDQxYTBlOGIzMDRkM2ZmNTVmZTI3YTIzMDUwN2FhYzc5Njg0MDE2YWMKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVR1ZSBBdWcgMjIgMTA6NDI6MjEgMjAwNiAtMDUwMAorKiBGaXggbWlub3IgaGVscCB0ZXh0IGlzc3VlcwogCi0gICAgQ2xlYW51cCBjb21waWxlciB3YXJuaW5ncy4KKyogImxvZyBhcHBlbmQiIGRpZCBub3QgYXBwZW5kIGEgbmV3bGluZQogCi1jb21taXQgNWRlNjJjNDdhODYyOGIzZGE0ZDczZjdjMDcwMjdmMzJhMzM0MmQ0MAotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJVHVlIEF1ZyAyMiAwOTozMTo1OSAyMDA2IC0wNTAwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjE6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSAgICBGaXggZGlzYWJsZV9vZiBib290aW5nCisqIEZpeCBzb21lIG1pc3NpbmcgY29tbWFuZHMsIGNsZWFudXAgaGVhZGVyIGZpbGVzCisgIChhdXRvc2NyaXB0LCBibXAsIGJzcCwgZmF0LCBtbWMsIG5hbmQsIHBvcnRpbywgLi4uKQogCi0gICAgU2lnbmVkLW9mZi1ieTogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KKyogUmV3cml0ZSBjb21tYW5kIGxvb2t1cCBhbmQgaGVscCBjb21tYW5kIChmaXggcHJvYmxlbXMgd2l0aCBidWJibGUKKyAgc29ydCB3aGVuIHNvcnRpbmcgY29tbWFuZCBuYW1lIGxpc3QpLiBNaW5vciBjbGVhbnVwIGhlcmUgYW5kIHRoZXJlLgogCi1jb21taXQgODdhNDQ5YzhhYzM5NjQyMGNiMjQyNjBmNzE3ZWE5ZTZmYWE4MjA0NwotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJVHVlIEF1ZyAyMiAwOToyMzo1NSAyMDA2IC0wNTAwCisqIE1lcmdlIGZyb20gInN0YWJsZSBicmFuY2giLCB0YWcgTEFCRUxfMjAwM18wNl8yOF8xODAwLXN0YWJsZToKKyAgLSBBbGxvdyB0byBjYWxsIHN5c21vbiBmdW5jdGlvbiBpbnRlcmFjdGl2ZWx5CisgIC0gUElDIG9uIExXTU9OIGJvYXJkIG5lZWRzIGRlbGF5IGFmdGVyIHBvd2VyLW9uCisgIC0gQWRkIG1pc3NpbmcgUlNSIGRlZmluaXRpb25zIGZvciBNUEM4eHgKKyAgLSBJbXByb3ZlIGxvZyBidWZmZXIgaGFuZGxpbmc6IGd1YXJhbnRlZSBjbGVhbiByZXNldCBhZnRlciBwb3dlci1vbgorICAtIEFkZCBzdXBwb3J0IGZvciBFWEJJVEdFTiBib2FyZCAoYWthICJnZW5pZSIpCisgIC0gQWRkIHN1cHBvcnQgZm9yIFNMODI0NSBib2FyZAogCi0gICAgU3VwcG9ydCBmb3IgRkRUIGluIHVJbWFnZSBmb3JtYXQsIGVycm9yIHdoZW4gdXNpbmcgRkRUIGZyb20gZmxhc2gKKyogQ29kZSBjbGVhbnVwOgorICAtIHJlbW92ZSB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgdHJhaWxpbmcgZW1wdHkgbGluZXMsIEMrKyBjb21tZW50cywgZXRjLgorICAtIHNwbGl0IGNtZF9ib290LmMgKHNlcGFyYXRlIGNtZF9iZGluZm8uYyBhbmQgY21kX2xvYWQuYykKIAotICAgIFNpZ25lZC1vZmYtYnk6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoZXMgYnkgS2VubmV0aCBKb2hhbnNzb24sIDI1IEp1biAyMDAzOgorICAtIG1ham9yIHJld29yayBvZiBjb21tYW5kIHN0cnVjdHVyZQorICAgICh3b3JrIGRvbmUgbW9zdGx5IGJ5IE1pY2hhbCBDZW5kcm93c2tpIGFuZCBKb2FraW0gS3Jpc3RpYW5zZW4pCiAKLWNvbW1pdCA3NWMyOTljMzgzNjlkMDFhZGRkNWUwNTRiOGExNjIxN2I3MGY0YTg2Ci1BdXRob3I6IEhhaXlpbmcgV2FuZyA8aGFpeWluZy53YW5nQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUdWUgQXVnIDE1IDE1OjEyOjU1IDIwMDYgLTA0MDAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMDoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotICAgIFVubG9jayBjYWNoZSBiZWZvcmUga2VybmVsIHN0YXJ0cyB1cCBmb3IgTVBDODZ4eAorKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMjYgSnVuIDIwMDM6CisgIC0gY3NiMjI2IGNvbmZpZ3VyYXRpb24gdXBkYXRlZAorICAtIGNyZWRpdHMgZm9yIGxvZ29kbCBwb3J0IHVwZGF0ZWQKKyAgLSBpbm5va29tIGNvbmZpZ3VyYXRpb24gdXBkYXRlZAorICAtIGxvZ29kbCB0cmVlIHVwZGF0ZSwgc3RpbGwgd2l0aCBjb2Rpbmcgc3R5bGUgaW5jb25zaXN0ZW5jaWVzCisgIC0gYWRkZWQgT0NNIGZvciBwcGM0MDUgd2FybmluZyB0byBSRUFETUUKIAotY29tbWl0IDY3MjU2Njc4ZjAwYzA5YjBhN2YxOWU4NjJlNWMxODQ3NTUzZDMxYmMKLUF1dGhvcjogSGFpeWluZyBXYW5nIDxoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVR1ZSBBdWcgMTUgMTU6MTM6MTUgMjAwNiAtMDQwMAorKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMjUgSnVuIDIwMDM6CisgIHVwZGF0ZSBOZXRWaWEgd2l0aCBWMiBib2FyZCBzdXBwb3J0CiAKLSAgICBDb3B5IEdsb2JhbCBEYXRhIFBvaW50ZXIgdG8gcjI5IGZvciBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUgorKiBIZWFkZXIgZmlsZSBjbGVhbnVwIGZvciBBUk0KIAotY29tbWl0IDFjOGY2ZDhmYjAyOGYxNTYwOTRkMDVmMmQxNDI5OGU2NDc5MzY0YWMKLUF1dGhvcjogSGFpeWluZyBXYW5nIDxoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVR1ZSBBdWcgMTUgMTU6MTI6NTUgMjAwNiAtMDQwMAorKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyNCBKdW4gMjAwMzoKKyAgLSBtYWtlIHN1cmUgdG8gdXNlIG9ubHkgVS1ib290IHByb3ZpZGVkIGhlYWRlciBmaWxlcworICAtIGZpeCBwcm9ibGVtcyB3aXRoICIucm9kYXRhLnN0cjEuNCIgc2VjdGlvbiBhcyB1c2VkIGJ5IEdDQy0zLngKIAotICAgIFVubG9jayBjYWNoZSBiZWZvcmUga2VybmVsIHN0YXJ0cyB1cCBmb3IgTVBDODZ4eAorKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI0IEp1biAyMDAzOgorICAtIFVwZGF0ZSBlc2QgQVNINDA1IGJvYXJkIGZpbGVzLgorICAtIFVwZGF0ZSBlc2QgREFTQV9TSU0gY29uZmlnIGZpbGUuCisgIC0gQWRkIHBpbmcgY29tbWFuZCB0byBzb21lIGVzZCBib2FyZHMuCiAKLWNvbW1pdCAwZDljY2M1NWVkZjlhN2YzYzViMmI2MjYzNTgwYTZlYThkNzAyYTA0Ci1BdXRob3I6IEhhaXlpbmcgV2FuZyA8aGFpeWluZy53YW5nQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUdWUgQXVnIDE1IDE1OjEzOjE1IDIwMDYgLTA0MDAKKyogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjMgSnVuIDIwMDM6CisgIFVwZGF0ZSBmb3IgTVBDODI2MEFEUyBib2FyZAogCi0gICAgQ29weSBHbG9iYWwgRGF0YSBQb2ludGVyIHRvIHIyOSBmb3IgREVDTEFSRV9HTE9CQUxfREFUQV9QVFIKKyogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjMgSnVuIDIwMDM6CisgIC0gY2xlYW51cCBvZiBHQ0MgMy54IGNvbXBpbGVyIHdhcm5pbmdzCiAKLWNvbW1pdCA4NmM4ZTE3ZjI1ZTk3MmE3ZTI3Mjk1MGEwNzM1ZmFkODRlMDgyYjg4Ci1BdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglXZWQgQXVnIDE2IDEzOjU5OjQ3IDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDQgSnVuIDIwMDM6CisgIGFkZCBsYXJnZSBtZW1vcnkgc3VwcG9ydCBmb3IgTVBDODI2NkFEUyBib2FyZAogCi0gICAgKiBGaXggZGlzYWJsZV9vZiBib290aW5nCisqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE5IEp1bmUgMDM6CisgIC0gRW5hYmxlZCBzdGFuZGFyZCB1LWJvb3QgZGV2aWNlIGFic3RyYWN0aW9uIGZvciBBUk0KKyAgLSBFbmFibGVkIGNvbnNvbGUgZGV2aWNlIGZvciBBUk0KKyAgLSBJbml0aWxpemVkIGJpX2JhdWRyYXRlIGZvciBBUk0KIAotICAgIFNpZ25lZC1vZmYtYnk6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAyMyBBcHIgMjAwMzoKKyAgZml4IGJ5dGUgb3JkZXIgZm9yIDgyNHggSTJDIGFkZHJlc3NlcyAod3JpdGUgb3ApCiAKLWNvbW1pdCAyNWM3NTFlOWFkYzg2ZTIyZmUzYjViNDdjZjI4MDYzNzliNTc1ZGI3Ci1BdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglXZWQgQXVnIDE2IDEwOjU0OjA5IDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjAgSnVuIDIwMDM6CisgIC0gaHltb2QgdXBkYXRlCisgIC0gY2xlYW51cCAoZXNwZWNpYWxseSBmb3IgZ2NjLTMueCBjb21waWxlcnMpCiAKLSAgICAqIFN1cHBvcnQgZm9yIEZEVCBpbiB1SW1hZ2UgZm9ybWF0LCBlcnJvciB3aGVuIHVzaW5nIEZEVCBmcm9tIGZsYXNoCisqIFBhdGNoIGJ5IFRvbSBHdWlsbGlhbXMsIDIwIEp1biAyMDAzOgorICBhZGRlZCBDT05GSUdfNzUwRlggc3VwcG9ydCBmb3IgSUJNIDc1MEZYIHByb2Nlc3NvcnMKIAotICAgIFNpZ25lZC1vZmYtYnk6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoIGJ5IERldmluIENydW1iLCAwMiBBcHIgMjAwMzoKKyAgRml4IGNsb2NrIGRpdmlkZXIgcm91bmRpbmcgcHJvYmxlbSBpbiBkcml2ZXJzL3NlcmlhbC5jCiAKLWNvbW1pdCBmZWNmMWM3ZTRkZTFiMjc3OWVkYzE4NzQyYjkxYzIyYmRjMzJiNjhiCi1BdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglNb24gQXVnIDE0IDE1OjMzOjM4IDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTkgSnVuZSAwMzoKKyAgLSBGaXhlZCBzbWM5MWMxMTEgZHJpdmVyIHRvIHN5bmMgd2l0aCB0aGUgdS1ib290IGVudmlyb25tZW50CisgICAgKGRyaXZlci9zbWM5MWMxMTEuYykuCisgIC0gQWRkZWQgZXRoX2luaXQgZXJyb3IgcmV0dXJuIGNoZWNrIGluIE5ldExvb3AgKG5ldC9uZXQuYykuCiAKLSAgICBGaXggQkFUMCB0byBhY3R1YWxseSBiZSBjYWNoZWFibGUsIG5vbi1ndWFyZGVkIGFzIGRvY3VtZW50ZWQuCisqIFBhdGNoIGJ5IEtlbiBDaG91LCAxOSBKdW5lIDIwMDM6CisgIEFkZGVkIHN1cHBvcnQgZm9yIEEzMDAwIFNCQyBib2FyZCAoQXJ0aXMgTWljcm9zeXN0ZW1zIEluYy4pCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorKiBQYXRjaGVzIGJ5IE11cnJheSBKZW5zZW4sIDE3IEp1biAyMDAzOgorICAtIEh5bW9kIGJvYXJkIGRhdGFiYXNlIG1vZHM6IGFkZCAid2hvIiBmaWVsZCBhbmQgbmV3IHhpbGlueCBjaGlwIHR5cGVzCisgIC0gcHJvdmlkZSBuZXcgImluaXRfY21kX3RpbWVvdXQoKSIgZnVuY3Rpb24gc28gY29kZSBleHRlcm5hbCB0bworICAgICJjb21tb24vbWFpbi5jIiBjYW4gdXNlIHRoZSAicmVzZXRfY21kX3RpbWVvdXQoKSIgZnVuY3Rpb24gYmVmb3JlCisgICAgZW50ZXJpbmcgdGhlIG1haW4gbG9vcAorICAtIGFkZCBEVFQgc3VwcG9ydCBmb3IgYWRtMTAyMSAobmV3IGZpbGUgZHR0L2FkbTEwMjEuYzsgY29uZmlnCisgICAgc2xpZ2h0bHkgZGlmZmVyZW50LiBzZWUgaW5jbHVkZS9jb25maWdzL2h5bW9kLmggZm9yIGFuIGV4YW1wbGUKKyAgICAocmVxdWlyZXMgQ09ORklHX0RUVF9BRE0xMDIxLCBDT05GSUdfRFRUX1NFTlNPUlMsIGFuZAorICAgIENGR19EVFRfQURNMTAyMSBkZWZpbmVkKQorICAtIGFkZCBuZXcgImVlcHJvbV9wcm9iZSgpIiBmdW5jdGlvbiB3aGljaCBoYXMgc2ltaWxhciBhcmdzIGFuZAorICAgIGJlaGF2ZXMgaW4gYSBzaW1pbGFyIHdheSB0byAiZWVwcm9tX3JlYWQoKSIgZXRjLgorICAtIGFkZCA4MjYwIEZDQyBldGhlcm5ldCBsb29wYmFjayBjb2RlIChuZXcgImV0aF9sb29wYmFja190ZXN0KCkiCisgICAgZnVuY3Rpb24gd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZpbmluZyBDT05GSUdfRVRIRVJfTE9PUEJBQ0tfVEVTVCkKKyAgLSBnZGJ0b29scyBjb3B5cmlnaHQgdXBkYXRlCisgIC0gZW5zdXJlIHRoYXQgc2V0X21zcigpIGV4ZWN1dGVzIHRoZSAic3luYyIgYW5kICJpc3luYyIgaW5zdHJ1Y3Rpb25zCisgICAgYWZ0ZXIgdGhlICJtdG1zciIgaW5zdHJ1Y3Rpb24gaW4gY3B1L21wYzgyNjAvaW50ZXJydXB0cy5jCisgIC0gODI2MCBJL08gcG9ydHMgZml4OiBPcGVuIERyYWluIHNob3VsZCBiZSBzZXQgbGFzdCB3aGVuIGNvbmZpZ3VyaW5nCisgIC0gYWRkIFNJVSBJUlEgZGVmaW5lcyBmb3IgODI2MAorICAtIGFsbG93IExEU0NSSVBUIG92ZXJyaWRlIGFuZCBPQkpDRkxBR1MgaW5pdGlhbGl6YXRpb246IGNoYW5nZSB0bworICAgIGNvbmZpZy5tayB0byBhbGxvdyBib2FyZCBjb25maWd1cmF0aW9ucyB0byBvdmVycmlkZSB0aGUgR05VCisgICAgbGlua2VyIHNjcmlwdCwgc2VsZWN0ZWQgdmlhIHRoZSBMRFNDUklQVCwgbWFrZSB2YXJpYWJsZSwgYW5kIHRvCisgICAgZ2l2ZSBhbiBpbml0aWFsIHZhbHVlIHRvIHRoZSBPQkpDRkxBR1MgbWFrZSB2YXJpYWJsZQorICAtIDgyNjAgaTJjIGVuaGFuY2VtZW50OgorICAgIG8gY29ycmVjdGx5IGV4dGVuZHMgdGhlIHRpbWVvdXQgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGFsbAorICAgICAgcXVldWVkIG1lc3NhZ2VzIGZvciBib3RoIHRyYW5zbWl0IGFuZCByZWNlaXZlCisgICAgbyB3aWxsIG5vdCBjb250aW51ZSB3aXRoIHJlY2VpdmUgaWYgdHJhbnNtaXQgdGltZXMgb3V0CisgICAgbyBlbnN1cmVzIHRoYXQgdGhlIGVycm9yIGNhbGxiYWNrIGlzIGRvbmUgZm9yIGFsbCBxdWV1ZWQgdHgKKyAgICAgIGFuZCByeCBtZXNzYWdlcworICAgIG8gY29ycmVjdGx5IGRldGVjdHMgYm90aCB0eCBhbmQgcnggdGltZW91dHMsIG9ubHkgZGVsaXZlcnMgb25lIHRvCisgICAgICB0aGUgY2FsbGJhY2ssIGFuZCBkb2VzIG5vdCBvdmVyd3JpdGUgYW4gZWFybGllciBlcnJvcgorICAgIG8gbG9naWMgaW4gaTJjX3Byb2JlIG5vdyBjb3JyZWN0CisgIC0gYWRkICJ2cHJpbnRmKCkiIGZ1bmN0aW9uIHNvIHRoYXQgInBhbmljKCkiIGZ1bmN0aW9uIGNhbiBiZQorICAgIHRlY2huaWNhbGx5IGNvcnJlY3QKKyAgLSBtYW55IEh5bW9kIGJvYXJkIGNoYW5nZXMKIAotY29tbWl0IDQwYmM4MzU1OWRiNTc0NTY4MTkwOWZkNzM4MmFlNTA5NTY3ZTExNmQKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVdlZCBBdWcgOSAxNTozMjoxNiAyMDA2IC0wNTAwCisqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAxNCBKdW4gMjAwMzoKKyAgLSBhZGQgc3VwcG9ydCBmb3IgTG9nb3Ryb25pYyBETCBkYXRhbG9nZ2VyIGJvYXJkCisgIC0gY2xlYW51cCBzZXJpYWwgbGluZSBhZnRlciBrZXJtaXQgYmluYXJ5IGRvd25sb2FkCisgIC0gYWRkIGRlYnVnWCBtYWNybyAoZGVidWcgbGV2ZWwgc3VwcG9ydCkKKyAgLSB1cGRhdGUgbWFjaC10eXBlcy5oIHRvIGxhdGVzdCBhcm0ubGludXgub3JnLnVrIG1hc3RlciBsaXN0LgogCi0gICAgUmVtb3ZlZCBNUEM4NjQxSFBDTiBEVFMgc291cmNlIGZpbGUgZnJvbSBidWlsZC4KLSAgICBJdCBpcyBubyBsb25nZXIgbGlua2VkIGludG8gVS1Cb290OyBpdHMgc291cmNlcyBhcmUKLSAgICBub3cgbG9jYXRlZCBpbiB0aGUga2VybmVsIHRyZWUuCisqIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAxMiBKdW4gMjAwMzoKKyAgLSByZXdyaXRlIG9mIHRoZSBTM0MyNFgwIHJlZ2lzdGVyIGRlZmluaXRpb25zIHN0dWZmCisgIC0gImRyaXZlciIgZm9yIHRoZSBidWlsdC1pbiBTM0MyNFgwIFJUQwogCi0gICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KKyogUGF0Y2hlcyBieSBZdWxpIEJhcmNvaGVuLCAxMiBKdW4gMjAwMzoKKyAgLSBBZGQgTUlJIHN1cHBvcnQgYW5kIEV0aGVybmV0IFBIWSBpbml0aWFsaXphdGlvbiBmb3IgTVBDODI2MEFEUyBib2FyZAorICAtIEZpeCBpbmNvcnJlY3QgU0lVTUNSIGluaXRpYWxpc2F0aW9uIGNhdXNlZCBieSB3cm9uZyBIYXJkIFJlc2V0CisgICAgY29uZmlndXJhdGlvbiB3b3JkIHN1cHBsaWVkIGJ5IEZQR0Egb24gc29tZSBNUEM4MjYwQURTIGJvYXJkcwogCi1jb21taXQgMzRjM2MwZTAxZGJmMWY4Y2MyYmQwOGRlOTJmMmI4OWJhODQ5MjFlYgotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIEp1biAyOCAxMDo0NzowMyAyMDA2IC0wNTAwCisqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxMCBKdW4gMjAwMzoKKyAgVW5pZnkgc3RhdHVzIExFRCBpbnRlcmZhY2UKIAotICAgICogU3dpdGNoZWQgZGVmYXVsdCBQQ0kgc3BlZWQgZm9yIDg1NDAgQURTIGJhY2sgdG8gMzNNSHoKKyogQWRkIHN1cHBvcnQgZm9yIERTMTI4ODcgUlRDOyBhZGQgUlRDIHN1cHBvcnQgZm9yIEFUQyBib2FyZAogCi0gICAgKiBBZGRlZCBjb21tZW50cyBhbmQgYSBwcmludGYgdG8gd2FybiB0aGF0IFBDSS1YIHdvbid0Ci0gICAgICB3b3JrIGF0IDMzTUh6Ci0gICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgMTctTWFyLTIwMDYKKyogUGF0Y2ggYnkgTmljb2xhcyBMYWNyZXNzb25uaWVyZSwgMTEgSnVuIDIwMDM6CisgIE1vZGlmaWNhdGlvbnMgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBBUk05MjBUIGJhc2VkIGRldmVsb3BtZW50IGtpdAorICAtIEFkZCBBdG1lbCBEYXRhRmxhc2ggc3VwcG9ydCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4KKyAgLSBBZGQgcG9zc2liaWxpdHkgdG8gYm9vdCBhIExpbnV4IGZyb20gRGF0YUZsYXNoIHdpdGggQk9PVE0gY29tbWFuZC4KKyAgLSBBZGQgRmxhc2ggZGV0ZWN0aW9uIG9uIEF0bWVsIEFUOTFSTTkyMDBESworICAgIChiZXR3ZWVuIEF0bWVsIEFUNDlCVjE2MTQgYW5kIEFUNDlCVjE2MTRBIGZsYXNoZXMpCisgIC0gUmVwbGFjZSBvbGQgRXRoZXJuZXQgUEhZIGxheWVyIGZ1bmN0aW9ucworICAtIENoYW5nZSBsaW5rIGFkZHJlc3MKIAotICAgIFNpZ25lZC1vZmYtYnk6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KKyogUGF0Y2ggYnkgRnJhbmsgU21pdGgsIDkgSnVuIDIwMDM6CisgIHVzZSBDUklUX0VYQ0VQVElPTiBmb3IgbWFjaGluZSBjaGVjayBvbiA0eHgKIAotY29tbWl0IGI2YzVlMTM3M2I2ZWEwYmIzN2ExOGU0YWVlY2VjMDA2MTNkMWNkMzkKLUF1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KLURhdGU6CVdlZCBKdW4gMjggMTA6NDY6MzUgMjAwNiAtMDUwMAorKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxMyBKdW4gMjAwMzoKKyAgYWRkZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlICJjYXJpbmZvIiBjb21tYW5kIGluIGNtZF9pbW1hcC5jCiAKLSAgICAqIEZpeGVkIGEgYnVnIHdoZXJlIDg1NTUgUENJIGNvZGUgdXNlZCB0aGUgb2xkIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiBuYW1lcyBQYXRjaCBieSBBbmR5IEZsZW1pbmcgMTctTWFyLTIwMDYKKyogRml4IENPTkZJR19ORVRfTVVMVEkgc3VwcG9ydCBpbiBpbmNsdWRlL25ldC5oCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoZXMgYnkgS3lsZSBIYXJyaXMsIDEzIE1hciAyMDAzOgorICAtIEFkZCBGQVQgcGFydGl0aW9uIHN1cHBvcnQKKyAgLSBBZGQgY29tbWFuZCBzdXBwb3J0IGZvciBGQVQKKyAgLSBBZGQgY29tbWFuZCBzdXBwb3J0IGZvciBNTUMKKyAgLS0tLQorICAtIEFkZCBJbnRlbCBQWEEgc3VwcG9ydCBmb3IgdmlkZW8KKyAgLSBBZGQgSW50ZWwgUFhBIHN1cHBvcnQgZm9yIE1NQworICAtLS0tCisgIC0gRW5hYmxlIE1NQyBhbmQgRkFUIGZvciBsdWJib2NrIGJvYXJkCisgIC0gT3RoZXIgbWlzYyBjaGFuZ2VzIGZvciBsdWJib2NrIGJvYXJkCiAKLWNvbW1pdCBiZjFkZmZmZDhjMjZmOGVjZGQ2MzBhMGFlNGM4MzRlNzUxZTRlNDUyCi1BdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglXZWQgSnVuIDI4IDEwOjQ2OjEzIDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCBBcHJpbCAwMiwgMjAwMzoKKyAgZml4IGZvciBTTVNDOTExMTEgZHJpdmVyCiAKLSAgICAqIEFkZGVkIFZJQSBjb25maWd1cmF0aW9uIHRhYmxlCisqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAwNCBKdW4gMjAwMzoKKyAgbWFrZSBwcGM0MDUgZXRoZXJuZXQgZHJpdmVyIGNvbXBhdGlibGUgd2l0aCBDT05GSUdfTkVUX01VTFRJIG9wdGlvbgogCi0gICAgKiBBZGRlZCBzdXBwb3J0IGZvciBQQ0kyIG9uIENEUwotICAgICAgUGF0Y2ggYnkgQW5keSBGbGVtaW5nIDE3LU1hci0yMDA2CisqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDUgSnVuIDIwMDM6CisgIC0gUFBDNHh4OiBGaXggYnVnIGZvciBpbml0aWFsIHN0YWNrIGluIGRhdGEgY2FjaGUgYXMgcG9pbnRlZCBvdXQgYnkKKyAgICBUaG9tYXMgU2NoYWVmZXIgKHRzY2hhZWZlckBnaWdhLXN0cmVhbS5kZSkuIE5vdyBpbml0YWwgc3RhY2sgaW4KKyAgICBkYXRhIGNhY2hlIGNhbiBiZSB1c2VkIGV2ZW4gaWYgdGhlIGNoaXAgc2VsZWN0IGlzIGluIHVzZS4KKyAgLSBDRkdfUlhfRVRIX0JVRkZFUiBhZGRlZCB0byBzZXQgdGhlIGV0aGVybmV0IHJlY2VpdmUgYnVmZmVyIGNvdW50CisgICAgKHNlZSBSRUFETUUgZm9yIGZ1cnRoZXIgZGVzY3JpcHRpb24pLgorICAtIENoYW5nZWQgY29uZmlnIGZpbGVzIG9mIENPTkZJR19FRVBSTzEwMCBib2FyZHMgdG8gdXNlIHRoZQorICAgIENGR19SWF9FVEhfQlVGRkVSIGRlZmluZS4KIAotICAgIFNpZ25lZC1vZmYtYnk6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KKyogQWRkIHN1cHBvcnQgZm9yIFJNVSBib2FyZAogCi1jb21taXQgYzg4ZjlmZTY2YjY0MjQ3ZTViNmEzODQxMGJhMzE1Y2EyNTU5NmQxNgotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIEp1biAyOCAxMDo0NTo0MSAyMDA2IC0wNTAwCisqIEFkZCBzdXBwb3J0IGZvciBUUU04NjJMIGF0IDEwMC81MCBNSHoKIAotICAgICogRml4ZWQgUENJIG1lbW9yeSBkZWZpbml0aW9ucyBQYXRjaCBieSBBbmR5IEZsZW1pbmcgMTctTWFyLTIwMDYKKyogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDAyIEp1biAyMDAzOgorICBtYWpvciByZWNvbnN0cnVjdGlvbiBvZiBuZXR3b3JraW5nIGNvZGU7CisgIGFkZCAicGluZyIgc3VwcG9ydCAob3V0Z29pbmcgb25seSEpCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNCBKdW5lIDIwMDM6CisgIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1VCBib2FyZAogCi1jb21taXQgOTcwNzRlZDk2NTUzMDliNjQyMzFiYzJjZWU2OWZlODUzOTlmODA1NQotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIEp1biAyOCAxMDo0NToxNyAyMDA2IC0wNTAwCisqIFBhdGNoZXMgYnkgVWRpIEZpbmtlbHN0ZWluLCAyIEp1bmUgMjAwMzoKKyAgLSBBZGRlZCBzdXBwb3J0IGZvciBjdXN0b20ga2V5Ym9hcmRzLCBpbml0aWFsaXplZCBieSBkZWZpbmluZyBhCisgICAgYm9hcmQtc3BlY2lmaWMgZHJ2X2tleWJvYXJkX2luaXQgYXMgd2VsbCBhcyBkZWZpbmluZyBDT05GSUdfS0VZQk9BUkQgLgorICAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBSQkM4MjMgYm9hcmQuCisgIC0gY3B1L21wYzh4eC9sY2QuYyBub3cgYXV0b21hdGljYWxseSBjYWxjdWxhdGVzIHRoZQorICAgIEhvcml6b250YWwgUGl4ZWwgQ291bnQgZmllbGQuCiAKLSAgICAqIEFkZGVkIHN1cHBvcnQgZm9yIGluaXRpYWxpemluZyBzZWNvbmQgUENJIGJ1cyBvbiA4NXh4IFBhdGNoIGJ5IEFuZHkgRmxlbWluZyAxNy1NYXItMjAwNgorKiBGaXggYWxpZ25tZW50IHByb2JsZW0gaW4gQk9PVFAgKGRoY3BfbGVhc2V0aW1lIG9wdGlvbikKKyAgW3BvaW50ZWQgb3V0IGJ5IE5pY29sYXMgTGFjcmVzc29ubmnocmUsIDIgSnVuIDIwMDNdCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoIGJ5IE1hcmsgUmFrZXMsIDE0IE1heSAyMDAzOgorICBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgZTEwMDAgZ2lnIGNhcmRzLgogCi1jb21taXQgZjBlNmY1N2Y3MWIzYzRmZGQxMzAyOGViMDNjM2YzZTkxOTI2ZGRhMgotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIEp1biAyOCAxMDo0NDo0OSAyMDA2IC0wNTAwCisqIFBhdGNoIGJ5IE55ZSBMaXUsIDMgSnVuIDIwMDM6CisgIGZpeCBjcml0aWNhbCB0eXBvIGluIE1BTVIgZGVmaW5pdGlvbiAoaW5jbHVkZS9tcGM4eHguaCkKIAotICAgICogQWRkZWQgUENJLVggI2RlZmluZXMgZm9yIFBDSS1YIGluaXRpYWxpemF0aW9uIFBhdGNoIGJ5IEFuZHkgRmxlbWluZyBvbiAxNy1NYXItMjAwNgorKiBGaXggcmVxdWlyZW1lbnQgdG8gYWxpZ24gVS1Cb290IGltYWdlIG9uIDE2IGtCIGJvdW5kYXJpZXMgb24gUFBDLgogCi0gICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAyIEp1biAyMDAzCisgIE1pbm9yIGNoYW5nZXMgZm9yIEtVUDRLIGNvbmZpZ3VyYXRpb24KIAotY29tbWl0IGE0ZTExNTU4YjgxMGVmMmNkZGZmZGY3YjlkODZiYzExMzA0NDE5NjAKLUF1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KLURhdGU6CVdlZCBKdW4gMjggMTA6NDQ6MjMgMjAwNiAtMDUwMAorKiBQYXRjaCBieSBNYXJjIFNpbmdlciwgMjkgTWF5IDIwMDM6CisgIEZpeGVkIHJhcnAgYm9vdCBtZXRob2QgZm9yIElBMzIgYW5kIG90aGVyIGxpdHRsZS1lbmRpYW4gQ1BVcy4KIAotICAgICogTWFkZSBzdXJlIHRoZSBjb2RlIHdoaWNoIGRpc2FibGVzIHByZWZldGNoIGZvciBQQ0kgZGV2aWNlcyBzZXRzIHRoZSBzaXplIG9mIHRoZSBwcmVmZXRjaCByZWdpb24gdG8gMCBQYXRjaCBieSBBbmR5IEZsZW1pbmcgb24gMTctTWFyLTIwMDYKKyogUGF0Y2ggYnkgTWFyYyBTaW5nZXIsIDI4IE1heSAyMDAzOgorICBBZGRlZCBwb3J0IEkvTyBjb21tYW5kcy4KIAotICAgIFNpZ25lZC1vZmYtYnk6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KKyogUGF0Y2ggYnkgTWF0dGhldyBNY0NsaW50b2NrLCAyOCBNYXkgMjAwMworICAtIGNwdS9tcGM4MjR4L3N0YXJ0LlM6IGZpeCByZWxvY2F0aW9uIGNvZGUgd2hlbiBib290aW5nIGZyb20gUkFNCisgIC0gbWlub3IgcGF0Y2hlcyBmb3IgdXR4ODI0NQogCi1jb21taXQgMGUxNjM4N2RiMWQ0YWFjZDViZjM1Y2I2ZDdjMTk0Mjc2NWMwMzQ3YgotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIEp1biAyOCAxMDo0MzozNiAyMDA2IC0wNTAwCisqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMjggTWF5IDIwMDM6CisgIHg4NiB1cGRhdGUKIAotICAgICogQWRkIEZsYXQgRGV2IFRyZWUgY29uc3RydWN0aW9uIGZvciBNUEM4NXh4IEFEUyBhbmQgQ0RTIGJvYXJkcyBQYXRjaCBieSBKb24gTG9lbGlnZXIgMTctSmFuLTIwMDYKKyogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgOSBNYXkgMjAwMyArIDI3IE1heSAyMDAzOgorICBhZGQgbmFuZCBmbGFzaCBzdXBwb3J0IHRvIFNYTkk4NTVUIGNvbmZpZ3VyYXRpb24KKyAgZml4L2V4dGVuZCBuYW5kIGZsYXNoIHN1cHBvcnQ6CisgIC0gZml4ICduYW5kIGVyYXNlJyBjb21tYW5kIHNvIGRvZXMgbm90IGVyYXNlIGJhZCBibG9ja3MKKyAgLSBmaXggJ25hbmQgd3JpdGUnIGNvbW1hbmQgc28gZG9lcyBub3Qgd3JpdGUgdG8gYmFkIGJsb2NrcworICAtIGZpeCBuYW5kX3Byb2JlKCkgc28gaGFuZGxlcyBubyBmbGFzaCBkZXRlY3RlZCBwcm9wZXJseQorICAtIGFkZCBkb2MvUkVBRE1FLm5hbmQKKyAgLSBhZGQgLmpmZnMyIGFuZCAub29iIG9wdGlvbnMgdG8gbmFuZCByZWFkL3dyaXRlCisgIC0gYWRkICduYW5kIGJhZCcgY29tbWFuZCB0byBsaXN0IGJhZCBibG9ja3MKKyAgLSBhZGQgJ2NsZWFuJyBvcHRpb24gdG8gJ25hbmQgZXJhc2UnIHRvIHdyaXRlIEpGRlMyIGNsZWFuIG1hcmtlcnMKKyAgLSBtYWtlIE5BTkQgcmVhZC93cml0ZSBmYXN0ZXIKIAotICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAyMyBNYXkgMjAwMzoKKyAgVXBkYXRlIGZvciBNUEM4MjY2QURTIGJvYXJkCiAKLWNvbW1pdCA4NTVlNmZiMDczZjlkMDRmZTRhN2YwNmMxMDdlY2JhYzYzNDRkZGQ0Ci1BdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglXZWQgSnVuIDI4IDEwOjQzOjAwIDIwMDYgLTA1MDAKKyogR2V0IChtb3N0bHkpIHJpZCBvZiBDRkdfTU9OSVRPUl9MRU4gZGVmaW5pdGlvbjsgY29tcHV0ZSByZWFsIGxlbmd0aAorICBpbnN0ZWFkIENGR19NT05JVE9SX0xFTiBpcyBub3cgb25seSB1c2VkIHRvIGRldGVybWluZQkgX2F0X2NvbXBpbGVfCisgIF90aW1lXyAgKCEpIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBlbWJlZGRlZCB3aXRoaW4gdGhlIFUtQm9vdCBpbWFnZSwKKyAgb3IgaW4gYSBzZXBhcmF0ZSBmbGFzaCBzZWN0b3IuCiAKLSAgICAqIFJlbW92ZWQgdGhlIG9mdHJlZS5kdHMgZm9yIHN0eHh0eCBpbiBsaWdodCBvZiB0aGUgY2hhbmdlcyB0byB0aGUgZmxhdCBkZXZpY2UgdHJlZSBoYW5kbGluZyBjb2RlIFBhdGNoIGJ5IE1hdHRoZXcgTWNDbGludG9jayAyNi1KdW5lLTIwMDYKKyogQ2xlYW51cCBDRkdfREVSICNkZWZpbmVzIGluIGNvbmZpZyBmaWxlcyAod2QgbWFpbnRhaW5lZCBvbmx5KQogCi1jb21taXQgNTQ5OGQ5MDMxMmFhZDlmNmJkYmYwNDc5ODYwMjdjMzViMDNjZDE2MwotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIEp1biAyOCAxMDo0MjoyNCAyMDA2IC0wNTAwCisqIEZpeCBkYXRhIGFib3J0IGV4Y2VwdGlvbiBoYW5kbGluZyBmb3IgYXJtOTIwdCBDUFUKIAotICAgICogUGF0Y2ggdG8gbW9kaWZ5IGZ0X2J1aWxkLmMgdG8gdXBkYXRlIGZsYXQgZGV2aWNlIHRyZWVzIGluIHBsYWNlIFBhdGNoIGJ5IE1hdHRoZXcgTWNDbGludG9jayAyNi1KdW5lLTIwMDYKKyogRml4IGFsaWdubWVudCBwcm9ibGVtcyB3aXRoIGZsYXNoIGRyaXZlciBmb3IgVFJBQiBib2FyZAogCi1jb21taXQgMDI2Nzc2OGVkZGM1Y2E3YmMxODY1YmM0MGM4NjY4MjlhYzVlZmJmZQotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIEp1biAyOCAxMDo0MTozNyAyMDA2IC0wNTAwCisqIFBhdGNoIGJ5IERvbmFsZCBXaGl0ZSwgMjEgTWF5IDIwMDM6CisgIGZpeCBjYWxjdWxhdGlvbiBvZiBiYXNlIGFkZHJlc3MgaW4gcGNpX2hvc2VfY29uZmlnX2RldmljZSgpCiAKLSAgICAqIE1vZGlmeSBib290bSBjb21tYW5kIHRvIHN1cHBvcnQgYm9vdGluZyB3aXRoIGZsYXQgZGV2aWNlIHRyZWVzIFBhdGNoIGJ5IE1hdHRoZXcgTWNDbGludG9jayAyNi1KdW5lLTIwMDYKKyogRml4IGJ1ZyBpbiBjb21tYW5kIGxpbmUgcGFyc2luZzogImNtZDE7Y21kMiIgaXMgc3VwcG9zZWQgdG8gYWx3YXlzCisgIGV4ZWN1dGUgImNtZDIiLCBldmVuIGlmICJjbWQxIiBmYWlscy4gTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50CisgIHRvICJydW4gdmFyMSB2YXIyIiB3aGVyZSB0aGUgY29udGVudHMgb2YgInZhcjIiIHdpbGwgTk9UIGJlCisgIGV4ZWN1dGVkIHdoZW4gYSBjb21tYW5kIGluICJ2YXIxIiBmYWlscy4KIAotY29tbWl0IDhmYzhiZDJjYzQ3OWI2Y2QxODhmZGVkZTQwMTBlMGUwNTI5NzBiOGEKLUF1dGhvcjogSm9obiBUcmFpbGwgPGpvaG4udHJhaWxsQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglXZWQgQXVnIDkgMTQ6MzM6NTAgMjAwNiArMDEwMAorKiBBZGQgemVyby1jb3B5IHJhbWRpc2sgc3VwcG9ydCAocmVxdWlyZXMgY29ycmVzcG9uZGluZyBrZXJuZWwgc3VwcG9ydCEpCiAKLSAgICBBZGQgUmFwaWRpbyBzdXBwb3J0IGZvciB0aGUgTVBDODY0MUhQQ04KKyogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDIwIE1heSAyMDAzOgorICBJbiBwcmVwYXJhdGlvbiBmb3IgYW4gaXhwIHBvcnQsIHJlbmFtZSBjcHUveHNjYWxlIGFuZCBhcmNoLXhzY2FsZQorICBpbnRvIGNwdS9weGEgYW5kIGFyY2gtcHhhLgogCi0gICAgU2lnbmVkLW9mZi1ieTogSm9obiBUcmFpbGwgPGpvaG4udHJhaWxsQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjMgTWF5IDIwMDM6CisgIC0gSUJNIFBQQzQwNUVQIHBvcnQgYWRkZWQuCisgIC0gQ09ORklHX1VBUlQxX0NPTlNPTEUgYWRkZWQuIElmIGRlZmluZWQgaW50ZXJuYWwgVUFSVDEgKGFuZCBub3QKKyAgICBVQVJUMCkgaXMgdXNlZCBhcyBkZWZhdWx0IFUtQm9vdCBjb25zb2xlLiBQUEM0eHggb25seSEKKyAgLSBlc2QgQVNINDA1IGJvYXJkIGFkZGVkIChQUEM0MDVFUCBiYXNlZCkuCisgIC0gQlVCSU5HQTQwNUVQIGJvYXJkIGFkZGVkIChQUEM0MDVFUCBiYXNlZCAtIElCTSBFdmFsIEJvYXJkKS4KKyAgLSBlc2QgQ1BDSTQwNUFCIGJvYXJkIGFkZGVkLgorICAtIGVzZCBQTUM0MDUgYm9hcmQgYWRkZWQuCisgIC0gVXBkYXRlIG9mIHNvbWUgZXNkIGJvYXJkcy4KIAotY29tbWl0IDkxYTQxNGM3ZDFmYjBlYWM5MTI1OTJjZDk5NWIzMGM5ZjIzMDQ1YzkKLUF1dGhvcjogSm9obiBUcmFpbGwgPGpvaG4udHJhaWxsQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUdWUgQXVnIDggMTE6MzI6NDMgMjAwNiArMDEwMAorKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTkgTWFpIDIwMDM6CisgIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1LTMgYm9hcmQKIAotICAgIEZpeCBjYXNsYXQgY2FsY3VsYXRpb24KKyogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgMjIgTWF5IDIwMDM6CisgIEZpeCBwcm9ibGVtIHdpdGggb25seSBwYXJ0aWFsbHkgY2xlYXJlZCAuYnNzIHNlZ21lbnQKIAotICAgIFNpZ25lZC1vZmYtYnk6IEpvaG4gVHJhaWxsIDxqb2huLnRyYWlsbEBmcmVlc2NhbGUuY29tPgorKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTIgTWF5IDIwMDM6CisgIGdldCBQQ0kgdG8gd29yayBvbiBhIE1QQzgyNjZBRFMgYm9hcmQ7IGluY29ycG9yYXRlIGNoYW5nZSB0bworICBjcHUvbXBjODI2MC9wY2kuYyB0byBlbmFibGUgb3ZlcnJpZGVzIG9mIFBDSSBtZW1vcnkgcGFyYW1ldGVycwogCi1jb21taXQgNzA5ZDMwNzNlNzQxNTMyNzhlNzkwNGE3MDgxOWJiZWY3ZGY1MGUxYQotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgotRGF0ZToJVGh1IEF1ZyAzIDE2OjE3OjU2IDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgTnllIExpdSwgMSBNYXkgMjAwMzoKKyAgbWlub3IgcGF0Y2hlcyBmb3IgdGhlIEZBRFM4eHgKIAotICAgIENvbnZlcnQgdG8gbWFjLWFkZHJlc3MgaW4gZXRoZXJuZXQgbm9kZXMuCisqIFBhdGNoIGJ5IFRob21hcyBTY2jkZmVyLCAyOCBBcHIgMjAwMzoKKyAgRml4IFNQRCBoYW5kbGluZyBmb3IgMjU2IEVDQyBESU1NIG9uIFdhbG51dAogCi1jb21taXQgNzE3NDhhZjgzM2NhMTAxN2VkZjE0MTViZTM3NjM2NmZmMjkzN2QxNwotQXV0aG9yOiBIYWl5aW5nIFdhbmcgPGhhaXlpbmcud2FuZ0BmcmVlc2NhbGUuY29tPgotRGF0ZToJRnJpIEp1bCAyOCAxMjo0MTozNSAyMDA2IC0wNDAwCisqIEFkZCBzdXBwb3J0IGZvciBhcmJpdHJhcnkgYml0bWFwcyBmb3IgVFJBQidzCVZGRCBjb21tYW5kOworICBhbGxvdyB0byBwYXNzIGJvb3QgYml0bWFwIGFkZHJlc3NlcyBpbiBlbnZpcm9ubWVudCB2YXJpYWJsZXM7CisgIGFsbG93IGZvciB6ZXJvIGJvb3QgZGVsYXkKIAotICAgIENvcnJlY3QgdGhlIGlycSB2YWx1ZSBvZiBEVUFSVDIKKyogUGF0Y2ggYnkgQ2hyaXN0aWFuIEdlad9pbmdlciwgMTkgTWF5IDIwMDI6CisgIE9uIFRSQUI6IHdhaXQgdW50aWwgdGhlIGR1bW15IGJ5dGUgaGFzIGJlZW4gY29tcGxldGVseSBzZW50CiAKLWNvbW1pdCA5Y2IzZTg4MTZhZTRkODU0ZTdkYzIyMTI4YzNlZWEzZDcwYmI5ODJjCi1BdXRob3I6IEhhaXlpbmcgV2FuZyA8aGFpeWluZy53YW5nQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglGcmkgSnVsIDI4IDEyOjQxOjQxIDIwMDYgLTA0MDAKKyogUGF0Y2ggYnkgRGF2aWQgVXBkZWdyYWZmLCAyMiBBcHIgMjAwMzoKKyAgdXBkYXRlIGZvciBDcmF5TDEgYm9hcmQKIAotICAgIENoYW5nZSB0aGUgc3BhY2Ugc2l6ZSBvZiBQRVggSU8gaW4gUkVBRE1FCisqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAyMSBBcHIgMjAwMzoKKyAgYWRkIGJvb3Qgc3VwcG9ydCBmb3IgQVJUT1MgKGEgcHJvcHJpZXRhcnkgT1MpCiAKLWNvbW1pdCAyMzlkYjM3Yzk0ZjdhOTI5NDFjNDQ2NWZlY2ViODY3YzYwOTI0MWM1Ci1BdXRob3I6IEhhaXlpbmcgV2FuZyA8aGFpeWluZy53YW5nQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglGcmkgSnVsIDI4IDEyOjQxOjE4IDIwMDYgLTA0MDAKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTEgQXByIDIwMDM6CisgIEFkZCBzdXBwb3J0IGZvciBSVEMgRFMxMzM4CiAKLSAgICBNb3ZlIGdldF9ib2FyZF9zeXNfY2xrIHRvIGJvYXJkIGRpcmVjdG9yeQorKiBQYXRjaCBieSBSb2QgQm95Y2UsIDI0IEphbiAyMDAzOgorICBGaXggY291bnRpbmcgb2YgZXh0ZW5kZWQgcGFydGl0aW9ucyBpbiBkaXNrYm9vdCBjb21tYW5kCiAKLWNvbW1pdCA0OTI5MDBiOTg1NDM5ZmJjZTFhMTE4YWZkZTFlMzVkZWY4NzBkYjAzCi1BdXRob3I6IEpvaG4gVHJhaWxsIDxqb2huLnRyYWlsbEBmcmVlc2NhbGUuY29tPgotRGF0ZToJRnJpIEp1bCAyOCAwOTowMzo1NCAyMDA2ICswMTAwCisqIFBhdGNoIGJ5IENocmlzdG9waGUgTGluZGhlaW1lciwgMjAgTWF5IDIwMDM6CisgIGFsbG93IHRoZSB1c2Ugb2YgQ0ZHX0xPQURTIHdoZW4gQ0ZHX05PX0ZMQVNIIGlzIHNldAogCi0gICAgRml4IDg2NDFIUENOIHBvbGx1dGlvbgorKiBGaXggU0RSQU0gdGltaW5nIG9uIFB1cnBsZSBib2FyZAogCi1jb21taXQgNTE1YWI4YTYyZTg1NzRlMmJhYmM2ZThkY2M0MzU0NGFkMjIxYzViMgotQXV0aG9yOiBKb2huIFRyYWlsbCA8am9obi50cmFpbGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CUZyaSBKdWwgMjggMDg6MTY6MDYgMjAwNiArMDEwMAorKiBBZGQgc3VwcG9ydCBmb3IgQ29tcGFjdEZsYXNoIG9uIEFUQyBib2FyZAorICAoaW5jbHVkZXMgc3VwcG9ydCBmb3IgSW50ZWwgODIzNjUgYW5kIGNvbXBhdGlibGUgUEMgQ2FyZCBjb250cm9sbGVycywKKyAgYW5kIFllbnRhLWNvbXBhdGlibGUgUENJLXRvLUNhcmRCdXMgY29udHJvbGxlcnMpCiAKLSAgICBGaXggODY0MUhQQ04gdGltZWJhc2UKKyogUGF0Y2ggYnkgTWF0aGlqcyBIYWFybWFuLCAwOCBNYXkgMjAwMzoKKyAgQWRkIGxhbjkxYzk2IGRyaXZlciAodGVzdGVkIG9uIEx1YmJvY2sgYW5kIGN1c3RvbSBQWEEyNTAgYm9hcmQgb25seSkKIAotY29tbWl0IGM4NjM2MGI4MzBmMWVlY2Q3YTcyMjA4NTc1ZGRlNGY1Nzg3OWZhZWEKLUF1dGhvcjogWmhhbmcgV2VpIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KLURhdGU6CUZyaSBKdWwgMjggMDA6MDE6MzQgMjAwNiArMDgwMAorKiBGaXggcHJvYmxlbSB3aXRoIHVzYWdlIG9mICJ0cnVlIiAodW5kZWZpbmVkIGluIGN1cnJlbnQgdmVyc2lvbnMgb2YgYmZkLmgpCiAKLSAgICBGaXhlZCBPRiBkZXZpY2UgdHJlZSBvZiBtcGM4Nnh4aHBjbiBib2FyZC4KKyogQWRkIHN1cHBvcnQgZm9yIFByb21lc3MgQVRDIGJvYXJkCiAKLSAgICBUaGUgY2hhbmdlcyB3b3JrcyBpbiB3aXRoIGtlcm5lbCBpcnEgbWFwcGluZyByZXdvcmsuCisqIFBhdGNoIGJ5IEtlaXRoIE91dHdhdGVyLCAyOCBBcHIgMjAwMzoKKyAgLSBNaXNjZWxsYW5lb3VzIGNvcnJlY3Rpb25zIGFuZCBhZGRpdGlvbnMgdG8gR0VOODYwVCBib2FyZCBzcGVjaWZpYyBjb2RlLgorICAtIEFkZGVkIEdFTjg2MF9TQyB2YXJpYW50IHRvIEdFTjg2MFQuCisgIC0gTWlzY2VsbGFuZW91cyBjb3JyZWN0aW9ucyB0byBHRU44NjBUIGRvY3VtZW50YXRpb24uCisgIC0gQ29ycmVjdCBkdXBsaWNhdGUgZW50cnkgaW4gVS1Cb290IENSRURJVFMgZmlsZS4KKyAgLSBBZGQgR0VOODYwVF9TQyBlbnRyeSBpbiBNQUlOVEFJTkVSUyBmaWxlLgorICAtIFVwZGF0ZSBDUkVESVRTIGZpbGUgd2l0aCBHRU44NjBUX1NDIGluZm8uCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBaaGFuZyBXZWkgPHdlaS56aGFuZ0BmcmVlc2NhbGUuY29tPgorKiBVcGRhdGUgU21pdGhzIEFlcm9zcGFjZSBhZGRyZXNzZXMgaW4gTUFJTlRBSU5FUlMgZmlsZQogCi1jb21taXQgYmVhM2YyOGQyODU5NDJiZjNmN2FiMzM5Y2U4NTE3OGRlZDU0NDIyNQotQXV0aG9yOiBIYWl5aW5nIFdhbmcgPGhhaXlpbmcud2FuZ0BmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIEp1bCAxMiAxMDo0ODowNSAyMDA2IC0wNDAwCisqIEZpeCBlcnJvciBoYW5kbGluZyBpbiBodXNoJ3MgdmVyc2lvbiBvZiAicnVuIiBjb21tYW5kCiAKLSAgICBBZGQgc3VwcG9ydCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBtYWMgYWRkcmVzc2VzIHRvIG9yIGZyb20gSUQgRUVQUk9NLgorKiBMV01PTiBleHRlbnNpb25zOgorICAtIFNwbGFzaHNjcmVlbiBzdXBwb3J0CisgIC0gbW9kZW0gc3VwcG9ydAorICAtIHN5c21vbiBzdXBwb3J0CisgIC0gdGVtcGVyYXR1cmUgZGVwZW5kZW5kIGVuYWJsaW5nIG9mIExDRAogCi0gICAgQWRkZWQgY29kZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBNYWMgYWRkcmVzc2VzIHRvL2Zyb20gSUQgRUVQUk9NKDB4NTcpLgotICAgIFdpdGggYXR0YWNoZWQgcGF0Y2gsIHdlIGNhbiB1c2UgY29tbWFuZCAibWFjL21hYyByZWFkL21hYyBzYXZlLyIKLSAgICB0byByZWFkIGFuZCB3cml0ZSBFRVBST00gdW5kZXIgdS1ib290IHByb21wdC4KKyogQWxsb3cgYm9vdGluZyBmcm9tIG9sZCAiUFBDQm9vdCIgZGlzayBwYXJ0aXRpb25zCiAKLSAgICBVLWJvb3Qgd2lsbCBjYWxjdWxhdGUgdGhlIGNoZWNrc3VtIG9mIEVFUFJPTSB3aGlsZSBib290dXAsCi0gICAgaWYgaXQgaXMgcmlnaHQsIHRoZW4gdS1ib290IHdpbGwgY2hlY2sgd2hldGhlciB0aGUgbWFjIGFkZHJlc3MKLSAgICBvZiBlVFNFQzAvMS8yLzMgaXMgYXZhaWxhbGJlIChub24temVybykuCisqIEFkZCBzdXBwb3J0IGZvciBUUU04MjU1IEJvYXJkIC8gTVBDODI1NSBDUFUKIAotICAgIElmIHRoZXJlIGlzIG1hYyBhZGRyZXNzIGF2YWlsYWJlIGluIEVFUFJPTSwgdS1ib290IHdpbGwgdXNlIGl0LAotICAgIG90aGVyZXdpc2UsIHUtYm9vdCB3aWxsIHVzZSB0aGUgbWFjIGFkZHJlc3MgZGVmaW5lZCBpbgotICAgIE1QQzg2NDFIUENOLmguIFRoaXMgbWF0Y2hlcyB0aGUgcmVxdWlyZW1lbnQgdG8gc2V0IHVuaXF1ZSBtYWMgYWRkcmVzcwotICAgIGZvciBlYWNoIFRTRUMgcG9ydC4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIFUtQm9vdCAwLjMuMToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotICAgIFNpZ25lZC1vZmYtYnk6IEhhaXlpbmcgV2FuZyA8aGFpeWluZy53YW5nQGZyZWVzY2FsZS5jb20+Ci0gICAgU2lnbmVkLW9mZi1ieTogWW9yayBTdW4gPHlvcmtzdW5AZnJlZXNjYWxlLmNvbT4KKyogTWFrZSBzdXJlIEJsb2NrIExvY2sgQml0cyBnZXQgY2xlYXJlZCBpbiBSMzYwTVBJIGZsYXNoIGRyaXZlcgogCi1jb21taXQgZmNiMjhlNzYzNDE1ZTBlNGU2NmIwZjQ1ODQyZDE1NTdhZTE5OGU1ZQotQXV0aG9yOiBKaW4gWmhlbmd4aW9uZyA8SmFzb24uSmluQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUaHUgSnVsIDEzIDEwOjM1OjEwIDIwMDYgLTA1MDAKKyogTVBDODIzIExDRCBkcml2ZXI6IEZpbGwgY29sb3IgbWFwIGJhY2t3YXJkcywgdG8gYWxsb3cgZm9yIHN0ZWFkeQorICBkaXNwbGF5IHdoZW4gTGludXggdGFrZXMgb3ZlcgogCi0gICAgRml4ZWQgaW5pdHJkIGlzc3VlIGJ5IGRlZmluZSBiaWcgUkFNCisqIFBhdGNoIGJ5IEVyd2luIFJvbCwgMjcgRmViIDIwMDM6CisgIEFkZCBzdXBwb3J0IGZvciBSVEVNUyAodGhpcyB0aW1lIGZvciByZWFsKS4KIAotICAgIFNpZ25lZC1vZmYtYnk6SmFzb24gSmluIDxKYXNvbi5qaW5AZnJlZXNjYWxlLmNvbT4KKyogQWRkIHN1cHBvcnQgZm9yICJibXAgaW5mbyIgYW5kICJibXAgZGlzcGxheSIgY29tbWFuZHMgdG8gbG9hZAorICBiaXRtYXAgaW1hZ2VzOyB0aGlzIGNhbiBiZSB1c2VkIChmb3IgZXhhbXBsZSBpbiBhICJwcmVib290IgorICBjb21tYW5kKSB0byBkaXNwbGF5IGEgc3BsYXNoIHNjcmVlbiB2ZXJ5IHF1aWNrbHkgYWZ0ZXIgcG93ZXJvbi4KIAotY29tbWl0IGU2Y2QyYTE3ODVkNzRlYzNkMzBhODZmMWNiMzYwYmU4ZGU0NzgxNTEKLUF1dGhvcjogSmFzb24gSmluIDxKYXNvbi5qaW5AZnJlZXNjYWxlLmNvbT4KLURhdGU6CUZyaSBKdWwgNyAxMDowMTo0NSAyMDA2IC0wNTAwCisqIEFkZCBzdXBwb3J0IGZvciAxMzMgTUh6IGNsb2NrIG9uIElOQ0EtSVAgYm9hcmQKIAotICAgIFdlIG1hZGUgYSB1LWJvb3QgcGF0Y2ggdG8gZml4IHRoZSBoYW5nIHVwIGlzc3VlCi0gICAgd2hlbiBib290aW5nIGZpbGVzeXN0ZW0gZnJvbSByYW1kaXNrLgorKiBQYXRjaCBieSBMdXR6IERlbm5pZywgMTAgQXByIDIwMDM6CisgIFVwZGF0ZSBmb3IgUjM2ME1QSSBib2FyZAogCi0gICAgU2lnbmVkLW9mZi1ieTpKYXNvbiBKaW4gPEphc29uLmppbkBmcmVlc2NhbGUuY29tPgorKiBBZGQgbmV3IG1lYW5pbmcgdG8gImF1dG9zdGFydCIgZW52aXJvbm1lbnQgdmFyaWFibGU6CisgIElmIHNldCB0byAibm8iLCBhIHN0YW5kYWxvbmUgaW1hZ2UgcGFzc2VkIHRvIHRoZQorICAiYm9vdG0iIGNvbW1hbmQgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIGxvYWQgYWRkcmVzcworICAoYW5kIGV2ZW50dWFsbHkgdW5jb21wcmVzc2VkKSwgYnV0IE5PVCBiZSBzdGFydGVkLgorICBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvYWQgYW5kIHVuY29tcHJlc3MgYXJiaXRyYXJ5CisgIGRhdGEuCiAKLWNvbW1pdCAzODQzM2NjYzU4NTBlZTcwNTQ5YWYwYjJiYzViOTIwMzU1ZWY1Mzg4Ci1BdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglXZWQgSnVuIDI4IDEwOjQ3OjAzIDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBBcHIgMjAwMzoKKyAgQ2hhbmdlZCBESENQIGNsaWVudCB0byB1c2UgSVAgYWRkcmVzcyBmcm9tIHNlcnZlciBvcHRpb24gZmllbGQgIzU0CisgIGZyb20gdGhlIE9GRkVSIHBhY2tldCBpbiB0aGUgc2VydmVyIG9wdGlvbiBmaWVsZCAjNTQgaW4gdGhlIFJFUVVFU1QKKyAgcGFja2V0LiBUaGlzIGZpeGVzIGEgcHJvYmxlbSB1c2luZyBhIFdpbmRvd3MgMjAwMCBESENQIHNlcnZlciwKKyAgd2hlcmUgdGhlIERIQ1Atc2VydmVyIGlzIG5vdCB0aGUgVEZUUC1zZXJ2ZXIuCiAKLSAgICAqIFN3aXRjaGVkIGRlZmF1bHQgUENJIHNwZWVkIGZvciA4NTQwIEFEUyBiYWNrIHRvIDMzTUh6Ci0gICAgKiBBZGRlZCBjb21tZW50cyBhbmQgYSBwcmludGYgdG8gd2FybiB0aGF0IFBDSS1YIHdvbid0Ci0gICAgICB3b3JrIGF0IDMzTUh6Ci0gICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgMTctTWFyLTIwMDYKKyogU2V0IG1heCBicmlnaHRuZXNzIGZvciBNTjExMjM2IGRpc3BsYXlzIG9uIFRSQUIgYm9hcmQKIAotICAgIFNpZ25lZC1vZmYtYnk6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KKyogQWRkIHN1cHBvcnQgZm9yIFRRTTg2MkwgbW9kdWxlcwogCi1jb21taXQgZTRjMmEwZWIwYzNlM2ZmYmY4MjQ4MDAxODRlZTQyYmRjOTlkNWIxOQotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIEp1biAyOCAxMDo0NjozNSAyMDA2IC0wNTAwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMC4zLjA6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSAgICAqIEZpeGVkIGEgYnVnIHdoZXJlIDg1NTUgUENJIGNvZGUgdXNlZCB0aGUgb2xkIHZhcmlhYmxlIGFuZAotICAgICAgZnVuY3Rpb24gbmFtZXMKLSAgICAgIFBhdGNoIGJ5IEFuZHkgRmxlbWluZyAxNy1NYXItMjAwNgorKiBQYXRjaCBieSBBcnVuIERoYXJhbmthciwgNCBBcHIgMjAwMzoKKyAgQWRkIElETUEgZXhhbXBsZSBjb2RlICh0ZXN0ZWQgb24gODI2MCBvbmx5KQogCi0gICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorKiBBZGQgc3VwcG9ydCBmb3IgUHVycGxlIEJvYXJkIChNSVBTNjQgNUtjKQogCi1jb21taXQgY2JmYzdjZTc1NmI4OGViMjZlNTUzN2JjN2I2MjVjNDQ1YzZkY2ZhYwotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIEp1biAyOCAxMDo0NjoxMyAyMDA2IC0wNTAwCisqIEFkZCBzdXBwb3J0IGZvciBNSVBTNjQgNUtjIENQVXMKIAotICAgICogQWRkZWQgVklBIGNvbmZpZ3VyYXRpb24gdGFibGUKLSAgICAqIEFkZGVkIHN1cHBvcnQgZm9yIFBDSTIgb24gQ0RTCi0gICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgMTctTWFyLTIwMDYKKyogRml4IG1pc3Npbmcgc2V0dGluZyBvZiAibG9hZGFkZHIiIGFuZCAiYm9vdGZpbGUiIG9uIEFSTSBhbmQgTUlQUwogCi0gICAgU2lnbmVkLW9mZi1ieTogQW5keSBGbGVtaW5nIDxhZmxlbWluZ0BmcmVlc2NhbGUuY29tPgorKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDQgQXByIDIwMDM6CisgIC0gdXBkYXRlIE1JUDQwNS00IGJvYXJkCiAKLWNvbW1pdCA1MmM3YTY4YjhkNTg3ZWJjZjVhNmIwNTFiNThiM2QzZmZhMzc3ZGRjCi1BdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglXZWQgSnVuIDI4IDEwOjQ1OjQxIDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCA0IEFwciAyMDAzOgorICAtIFUtQm9vdCB2ZXJzaW9uIGVudmlyb25tZW50IHZhcmlhYmxlICJ2ZXIiIGFkZGVkCisgICAgKENPTkZJR19WRVJTSU9OX1ZBUklBQkxFKS4KKyAgLSBDaGFuZ2VkIFBQQzQwNUdQciB2ZXJzaW9uIGZyb20gQSB0byBCLgorICAtIENoYW5nZWQgQ1BDSTQwNSB0byB1c2UgQ1RTIGluc3RlYWQgb2YgRFNSIG9uIFBQQzQwNSBVQVJUMS4KIAotICAgICogRml4ZWQgUENJIG1lbW9yeSBkZWZpbml0aW9ucwotICAgICAgUGF0Y2ggYnkgQW5keSBGbGVtaW5nIDE3LU1hci0yMDA2CisqIFBhdGNoZXMgYnkgRGVuaXMgUGV0ZXIsIDAzIEFwcmlsIDIwMDM6CisgIC0gZml4IFBDSSBJUlFzIG9uIE1QTCBib2FyZHMKKyAgLSBmaXggdHdvIG1vcmUgdW4tcmVsb2NhdGVkIHBvaW50ZXIgcHJvYmxlbXMKIAotICAgIFNpZ25lZC1vZmYtYnk6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KKyogRml4IGJlaGF2aW91ciBvZiAicnVuIiBjb21tYW5kOgorICAtIHByaW50IGVycm9yIG1lc3NhZ2UgaXYgdmFyaWFibGUgZG9lcyBub3QgZXhpc3QKKyAgLSB0ZXJtaW5hdGUgcHJvY2Vzc2luZyBvZiBhcmd1bWVudHMgaW4gY2FzZSBvZiBlcnJvcgogCi1jb21taXQgMDg3NDU0NjA5ZTQ3Mjk1NDQzYWY3OTNhMjgyY2RkY2Q5MWE1ZjQ5YwotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIEp1biAyOCAxMDo0NToxNyAyMDA2IC0wNTAwCisqIFBhdGNoZXMgYnkgUGV0ZXIgRmlndWxpLCAxMCBNYXIgMjAwMworICAtIEFkZCBzdXBwb3J0IGZvciBCVFVBUlQgb24gUFhBIHBsYXRmb3JtCisgIC0gQWRkIHN1cHBvcnQgZm9yIFdFUCBFUDI1MCAoUFhBKSBib2FyZAogCi0gICAgKiBBZGRlZCBzdXBwb3J0IGZvciBpbml0aWFsaXppbmcgc2Vjb25kIFBDSSBidXMgb24gODV4eAotICAgICAgUGF0Y2ggYnkgQW5keSBGbGVtaW5nIDE3LU1hci0yMDA2CisqIEZpeCBmbGFzaCBwcm9ibGVtcyBvbiBJTkNBLUlQOyBhZGQgdG9vbCB0byBhbGxvdyBicnVuaW5nIGltYWdlcyAgdG8KKyAgZmxhc2ggdXNpbmcgYSBCREkyMDAwCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBBbmR5IEZsZW1pbmcgPGFmbGVtaW5nQGZyZWVzY2FsZS5jb20+CisqIEltcGxlbWVudCBmaXggZm9yIEkyQyBFZGdlIENvbmRpdGlvbnMgcHJvYmxlbSBmb3IgYWxsIGJvYXJkcyB0aGF0CisgIHVzZSB0aGUgYml0LWJhbmdpbmcgZHJpdmVyIChjb21tb24vc29mdF9pMmMuYykKIAotY29tbWl0IGI2MzZhYWViNmZkNTE2YTQ0MmZiNjExYmJlZWRkZjMwNzdhNjg3ZmIKLUF1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KLURhdGU6CVdlZCBKdW4gMjggMTA6NDQ6NDkgMjAwNiAtMDUwMAorKiBQYXRjaCBieSBNYXJ0aW4gV2luaXN0b2VyZmVyLCAyMyBNYXIgMjAwMworICAtIEFkZCBwb3J0IHRvIE1QQzU1NS81NTYgbWljcm9jb250cm9sbGVycworICAtIEFkZCBzdXBwb3J0IGZvciBjbWkgY3VzdG9tZXIgYm9hcmQgd2l0aAorICAgIEludGVsIDI4RjEyOEozQSwgMjhGMzIwSjNBIG9yIDI4RjY0MEozQSBmbGFzaC4KIAotICAgICogQWRkZWQgUENJLVggI2RlZmluZXMgZm9yIFBDSS1YIGluaXRpYWxpemF0aW9uCi0gICAgICBQYXRjaCBieSBBbmR5IEZsZW1pbmcgb24gMTctTWFyLTIwMDYKKyogUGF0Y2ggYnkgUmljayBCcm9uc29uLCAyOCBNYXIgMjAwMzoKKyAgLSBmaXggY29tbW9uL2NtZF9uYW5kLmMKIAotICAgIFNpZ25lZC1vZmYtYnk6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KKyogUGF0Y2ggYnkgQXJ1biBEaGFyYW5rYXIsIDI0IE1hciAyMDAzOgorICAtIGFkZCB0aHJlYWRzIC8gc2NoZWR1bGVyIGV4YW1wbGUgY29kZQogCi1jb21taXQgMjBhYmJjNmZmZmExMTU2OTAxMDdjYzk0MmM3YWJmODRiZGMwM2ExYgotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIEp1biAyOCAxMDo0NDoyMyAyMDA2IC0wNTAwCisqIEFkZCBwYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMzEgTWFyIDIwMDM6CisgIC0gYWRkIGN0cmwtYyBzdXBwb3J0IGZvciBrZXJtaXQgZG93bmxvYWQKKyAgLSBhbGlnbiBiZGluZm8gb3V0cHV0IG9uIEFSTQorICAtIGNzYjIyNiBib2FyZDogYnJpbmcgaW4gc3luYyB3aXRoIGlubm9rb20vbWVtc2V0dXAuUworICAtIGNzYjIyNiBib2FyZDogZml4IE1EUkVGUiBoYW5kbGluZworICAtIG1pc2MgZG9jIGZpeGVzIC8gZXh0ZW5zaW9ucworICAtIGlubm9rb20gYm9hcmQ6IGNsZWFudXAsIE1EUkVGUiBmaXggaW4gbWVtc2V0dXAuUywgY29uZmlnIHVwZGF0ZQorICAtIGFkZCBCT09UX1BST0dSRVNTIHRvIGFybWxpbnV4LmMKIAotICAgICogTWFkZSBzdXJlIHRoZSBjb2RlIHdoaWNoIGRpc2FibGVzIHByZWZldGNoIGZvciBQQ0kgZGV2aWNlcwotICAgICAgc2V0cyB0aGUgc2l6ZSBvZiB0aGUgcHJlZmV0Y2ggcmVnaW9uIHRvIDAKLSAgICAgIFBhdGNoIGJ5IEFuZHkgRmxlbWluZyBvbiAxNy1NYXItMjAwNgorKiBBZGQgQ1BVIElELCB2ZXJzaW9uLCBhbmQgY2xvY2sgc3BlZWQgZm9yIElOQ0EtSVAKIAotICAgIFNpZ25lZC1vZmYtYnk6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KKyogUGF0Y2hlcyBieSBEYXZlIEVsbGlzLCAxOCBNYXIgMjAwMyBmb3IgU1hOSTg1NVQgYm9hcmQ6CisgIC0gZml4IFNSQU0gYW5kIFNEUkFNIG1lbW9yeSBzaXppbmcKKyAgLSBhZGQgc3RhdHVzIExFRCBzdXBwb3J0CisgIC0gYWRkIE1BQyBhZGRyZXNzIGZvciBzZWNvbmQgKFNDQzEpIGV0aGVybmV0IHBvcnQKIAotY29tbWl0IDQwZDVmYTM1ZDAyZGYyMjU4MDU5M2JmMDAzOWFiMTczMzY3ZThlZjAKLUF1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KLURhdGU6CVdlZCBKdW4gMjggMTA6NDM6MzYgMjAwNiAtMDUwMAorKiBVcGRhdGUgZGVmYXVsdCBlbnZpcm9ubWVudCBmb3IgVFFNODI2MCBib2FyZAogCi0gICAgKiBBZGQgRmxhdCBEZXYgVHJlZSBjb25zdHJ1Y3Rpb24gZm9yIE1QQzg1eHggQURTIGFuZCBDRFMgYm9hcmRzCi0gICAgICBQYXRjaCBieSBKb24gTG9lbGlnZXIgMTctSmFuLTIwMDYKKyogUGF0Y2ggYnkgUmljayBCcm9uc29uLCAxNiBNYXIgMjAwMzoKKyAgLSBBZGQgTkFORCBmbGFzaCBzdXBwb3J0IGZvciByZWFkaW5nLCB3cml0aW5nLCBhbmQgZXJhc2luZyBOQU5ECisgICAgZmxhc2ggKGNlcnRhaW4gZm9ybXMgb2Ygd2hpY2ggYXJlIGNhbGxlZCBTbWFydE1lZGlhKS4KKyAgLSBBZGQgc3VwcG9ydCBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIEFSTTkyMFQgYmFzZWQgZGV2ZWxvcG1lbnQga2l0LgogCi0gICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KKyogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE5IE1hciAyMDAzOgorICAtIHVzZSBhcm0tbGludXgtZ2NjIGFzIGRlZmF1bHQgY29tcGlsZXIgZm9yIEFSTQorICAtIGZpeCBpMmMgZml4dXAgY29kZQorICAtIGZpeCBtaXNzaW5nIGJhdWRyYXRlIHNldHRpbmcKKyAgLSBhZGRlZCAkbG9hZGFkZHIgLyBDRkdfTE9BRF9BRERSIHN1cHBvcnQgdG8gbG9hZGIKKyAgLSBtb3ZlZCAiaWdub3JpbmcgdHJhaWxpbmcgY2hhcmFjdGVycyIgX2JlZm9yZV8gdS1ib290IHdhbnRzIHRvCisgICAgcHJpbnQgb3V0IGRpYWdub3N0aWNzIG1lc3NhZ2VzOyByZW1vdmVzIGJvZ3VzIGNoYXJhY3RlcnMgYXQgdGhlCisgICAgZW5kIG9mIHRyYW5zbWlzc2lvbgogCi1jb21taXQgYmU3ZThiMGNiNWEwYzQ5ZGMxODAwNzViOTZkZjI5NmE4OTNiZjE0NgotQXV0aG9yOiBNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIEp1biAyOCAxMDo0MzowMCAyMDA2IC0wNTAwCisqIFBhdGNoIGJ5IEpvaG4gWmhhbiwgMTggTWFyIDIwMDM6CisgIEFkZCBzdXBwb3J0IGZvciBTaW5vVmVlIE1pY3Jvc3lzdGVtcyBTQzh4eCBib2FyZHMKIAotICAgICogUmVtb3ZlZCB0aGUgb2Z0cmVlLmR0cyBmb3Igc3R4eHR4IGluIGxpZ2h0IG9mIHRoZSBjaGFuZ2VzCi0gICAgICB0byB0aGUgZmxhdCBkZXZpY2UgdHJlZSBoYW5kbGluZyBjb2RlCi0gICAgICBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2sgMjYtSnVuZS0yMDA2CisqIFBhdGNoIGJ5IFJvbGYgT2ZmZXJtYW5ucywgMjEgTWFyIDIwMDM6CisgIHBvcnRlZCB0aGUgZG5wMTExMCByZWxhdGVkIGNoYW5nZXMgZnJvbSB0aGUgY3VycmVudCBhcm1ib290IGN2cyB0bworICBjdXJyZW50IHUtYm9vdCBjdnMuIHNtYzkxMTExIGRvZXMgbm90IHdvcmsuIHByb2JsZW0gbWFya2VkIGluCisgIHNtYzkxMTExLmMsIGdyZXAgZm9yICJGSVhNRSIuCiAKLWNvbW1pdCAxYjM4MGVjMjI1NjY1ZTczOTU5Njc3ZjM4OTNkYzY1OGM1OTI1ZTA1Ci1BdXRob3I6IE1hdHRoZXcgTWNDbGludG9jayA8bXNtQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglXZWQgSnVuIDI4IDEwOjQyOjI0IDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgQnJpYW4gQXVsZCwgMjUgTWFyIDIwMDM6CisgIEFkZCBzdXBwb3J0IGZvciBTVE0gZmxhc2ggY2hpcHMgb24gZWJvbnkgYm9hcmQKIAotICAgICogUGF0Y2ggdG8gbW9kaWZ5IGZ0X2J1aWxkLmMgdG8gdXBkYXRlIGZsYXQgZGV2aWNlIHRyZWVzIGluIHBsYWNlCi0gICAgICBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2sgMjYtSnVuZS0yMDA2CisqIEFkZCBQQ0kgc3VwcG9ydCBmb3IgTVBDODI1MCBCb2FyZHMgKFBNODI1IG1vZHVsZSkKIAotY29tbWl0IDk4YTljNGQ0NjhhOTQyYTA5ZWJlODk3OWJlYzUwODAxN2YzZTQ0NjIKLUF1dGhvcjogTWF0dGhldyBNY0NsaW50b2NrIDxtc21AZnJlZXNjYWxlLmNvbT4KLURhdGU6CVdlZCBKdW4gMjggMTA6NDE6MzcgMjAwNiAtMDUwMAorKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI1IE1hciAyMDAzOgorICAtIFBDSTQwNSB1cGRhdGUuCiAKLSAgICAqIE1vZGlmeSBib290bSBjb21tYW5kIHRvIHN1cHBvcnQgYm9vdGluZyB3aXRoIGZsYXQgZGV2aWNlIHRyZWVzCi0gICAgICBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2sgMjYtSnVuZS0yMDA2CisqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjAgTWFyIDIwMDM6CisgIC0gQ1BDSTQwNTIgdXBkYXRlIChzdXBwb3J0IGZvciByZXZpc2lvbiAzKS4KKyAgLSBTZXQgZWRnZSBjb25kaXRpb25pbmcgY2lyY3VpdHJ5IG9uIFBQQzQwNUdQciBmb3IgY29tcGF0aWJpbGl0eQorICAgIHRvIGV4aXN0aW5nIFBQQzQwNUdQIGRlc2lnbnMuCisgIC0gQ2xpcCB1ZGl2IHRvIDUgYml0cyBvbiBQUEM0MDUgKHNlcmlhbC5jKS4KIAotY29tbWl0IGRhMDEyYWI2NjFmZDRhYjE2OWRkN2I5YjMyMjAxYTRkZjYyY2YzNGEKLUF1dGhvcjogSmluIFpoZW5neGlvbmcgPEphc29uLkppbkBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIEp1biAyOCAwODo0Mzo1NiAyMDA2IC0wNTAwCisqIEV4dGVuZCBJTkNBSVAgYm9hcmQgc3VwcG9ydDoKKyAgLSBhZGQgYXV0b21hdGljIFJBTSBzaXplIGRldGVjdGlvbgorICAtIGFkZCAiYmRpbmZvIiBjb21tYW5kCisgIC0gcGFzcyBmbGFzaCBhZGRyZXNzIGFuZCBzaXplIHRvIExpbnV4IGtlcm5lbAorICAtIHN3aXRjaCB0byAxNTAgTUh6IGNsb2NrCiAKLSAgICBDaGFuZ2UgSWQgdG8gc3ltYm9saWMgbmFtZSBmb3IgUlRMODEzOQorKiBBdm9pZCBmbGlja2VyIG9uIHRoZSBUUkFCJ3MgVkZEIGJ5IHN5bmNocm9uaXppbmcgdGhlIGVuYWJsZSB3aXRoCisgIHRoZSBIU1lOQy9WU1lOQy4gUmVxdWlyZXMgbmV3IENQTEQgY29kZSAoVmVyc2lvbiAxMDEgZm9yIFJldi4gMTAwCisgIGJvYXJkcywgdmVyc2lvbiAxNTMgZm9yIFJldi4gMjAwIGJvYXJkcykuCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBKYXNvbiBKaW4gPEphc29uLmppbkBmcmVlc2NhbGUuY29tPgorKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMTIgTWFyIDIwMDM6CisgIEZpeCByZWxvY2F0aW9uIHByb2JsZW0gb2Ygc3RhdGljYWxseSBpbml0aWFsaXplZCBzdHJpbmcgcG9pbnRlcnMKKyAgaW4gY29tbW9uL2NtZF9wY2kuYwogCi1jb21taXQgYmMwOWNmM2MyYmZiOGQ1NGM2NTljYmIzMzJmNzlkMDk1MDk4MmZkMAotQXV0aG9yOiBKaW4gWmhlbmd4aW9uZy1SNjQxODggPEphc29uLkppbkBmcmVlc2NhbGUuY29tPgotRGF0ZToJVHVlIEp1biAyNyAxODoxMjoxMCAyMDA2ICswODAwCisqIFBhdGNoIGJ5IEthaS1Vd2UgQmz2bSwgMTIgTWFyIDIwMDM6CisgIENsZWFudXAgJiBidWcgZml4ZXMgZm9yIEpGRlMyIGNvZGU6CisgIC0gdGhlIG1lbW9yeSBtYW5nZW1lbnQgd2FzIGJyb2tlbi4gSXQgY2F1c2VkIGhhdm9jIG9uIG1hbGxvYyBieQorICAgIHdyaXRpbmcgYmV5b25kIHRoZSBibG9jayBib3VuZGFyaWVzLgorICAtIHRoZSBsZW5ndGggY2FsY3VsYXRpb24gZm9yIGZpbGVzIHdhcyB3cm9uZywgc29tZXRpbWVzIHJlc3VsdGluZworICAgIGluIHNob3J0IGZpbGUgcmVhZHMuCisgIC0gZGF0YSBjb3B5aW5nIG5vdyBvcHRpb25hbGx5IHRha2VzIGZyYWdtZW50IHZlcnNpb24gbnVtYmVycyBpbnRvCisgICAgYWNjb3VudCwgdG8gYXZvaWQgY29weWluZyBmcm9tIG9sZGVyIGRhdGEuCisgIFNlZSBkb2MvUkVBRE1FLkpGRlMyIGZvciBkZXRhaWxzLgogCi0gICAgRml4IFJUTDgxMzkgaW4gYmlnIGVuZGlhbgorKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDEyIE1hciAyMDAzOgorICAtIDE2LzMyIE1CIGFuZCA1MC84MCBNSHogc3VwcG9ydCB3aXRoIGF1dG8tZGV0ZWN0aW9uIGZvciBJUDg2MAorICAtIEVUSDA1IGFuZCBCRURCVUcgc3VwcG9ydCBmb3IgQ1U4MjQKKyAgLSBhZGRlZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBDUEM0NQorICAtIG5ldyBCT09UUk9NL0ZMQVNIMCBhbmQgRE9DIGJhc2UgZm9yIFBNODI2CiAKLSAgICBzaWduZWQtb2ZmLWJ5OiBKYXNvbiBKaW4gPEphc29uLkppbkBmcmVlc2NhbGUuY29tPgotICAgIHNpZ25lZC1vZmYtYnk6IFdlaSBaaGFuZyA8d2VpLnpoYW5nQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTIgTWFyIDIwMDM6CisgIEZpeCB0aGUgY2hwYXJ0IGNvbW1hbmQgb24gaW5ub2tvbSBib2FyZAogCi1jb21taXQgZmNmYjlhNTc5NDdmYzIwM2I5OWZlODFhYjA1NzhmNzI4NjI2MWY5ZgotQXV0aG9yOiBKaW4gWmhlbmd4aW9uZy1SNjQxODggPEphc29uLkppbkBmcmVlc2NhbGUuY29tPgotRGF0ZToJVHVlIEp1biAyNyAxODoxMjoyMyAyMDA2ICswODAwCisqIE5hbWUgY2xlYW51cDoKKyAgbXYgaW5jbHVkZS9hc20taTM4Ni9wcGNib290LWkzODYuaCBpbmNsdWRlL2FzbS1pMzg2L3UtYm9vdC1pMzg2LmgKKyAgcy9QUENCb290L1UtQm9vdC8gaW4gc29tZSBmaWxlcworICBzL3BJbWFnZS91SW1hZ2UvICBpbiBzb21lIGZpbGVzCiAKLSAgICBGaXggVHNlYyBidWcgd2hlbiBubyBsaW5rCisqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDE1IEphbiAyMDAzOgorICBGaXggJycgY29tbWFuZCBsaW5lIHF1b3RpbmcKIAotICAgICBXaGVuIHRmdHAgYSBub24tZXhpc3QgZmlsZSBmcm9tIHRoZSB0ZnRwIHNlcnZlciwgdS1ib290IHdpbGwgY2hlY2sKLSAgICAgdGhlIGxpbmsgb2YgYWxsIGV0aCBwb3J0LiBUaGUgb3JpZ2luYWwgZmlsZSB3aWxsIHJldHVybiB3cm9uZyBsaW5rCi0gICAgIHN0YXRlIG9uIHRoZSBubyBsaW5rIHBvcnRzLgorKiBQYXRjaCBieSBUaGUgTEVPWCB0ZWFtLCAxOSBKYW4gMjAwMzoKKyAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEVMUFQ4NjAgYm9hcmQKKyAgLSBhZGQgc3VwcG9ydCBmb3IgRGFsbGFzIGRzMTY0eCBSVEMKIAotICAgIHNpZ25lZC1vZmYtYnk6IEphc29uIEppbiA8SmFzb24uSmluQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAzMSBKYW4gMjAwMzoKKyAgLSBtaW5pbWFsIHNldHVwIGZvciBDYXJkQnVzIGJyaWRnZXMKKyAgLSBhZGQgRUVQUk9NIHJlYWQvd3JpdGUgc3VwcG9ydCBpbiB0aGUgQ1M4OTAwIGRyaXZlcgorICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgYnVpbHRpbiBJMkMgY29udHJvbGxlciBpbiB0aGUgU2Ftc3VuZyBzM2MyNHgwIGNoaXBzCisgIC0gYWRkIHN1cHBvcnQgZm9yIE1QTCdzIFZDTUE5IChTYW1zdW5nIHMzYzI0MTAgYmFzZWQpIGJvYXJkCiAKLWNvbW1pdCBiZDIyYzJiOTc1MTRmYmZiMGUwM2JkOWM3MmIzNDQ1ZTRkYmQ1N2UyCi1BdXRob3I6IEppbiBaaGVuZ3hpb25nLVI2NDE4OCA8SmFzb24uSmluQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUdWUgSnVuIDI3IDE4OjEyOjAyIDIwMDYgKzA4MDAKKyogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDQgRmViIDIwMDM6CisgIGFkZCBzdXBwb3J0IGZvciBSVEMgRFMxMzA3CiAKLSAgICBGaXggYnVnIGZvciBpb19iYXIgc2l6ZSBkdXJpbmcgcGNpIHNjYW4KKyogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDUgRmViIDIwMDM6CisgIGZpeCBQTFBSQ1IvU0NDUiBpbml0IHNlcXVlbmNlIG9uIDh4eCB0byBhbGxvdyBmb3IKKyAgY2hhbmdlcyBvZiBFQkRGIGJ5IHNvZnR3YXJlCiAKLSAgICBEdXJpbmcgdGhlIHBjaSBzY2FuIHByb2Nlc3MsIFNvbWUgZGV2aWNlcyByZXR1cm4gYmFyX3JlcG9uc2Ugd2l0aCB0aGUKLSAgICBoaWdoZXN0IGJ5dGVzIDAsIHN1Y2ggYXMgdGhlIHBjaSBicmlkZ2UgaW4gdWxpMTU3NSByZXR1cm4gYmFyX3Jlc3BvbnNlCi0gICAgd2l0aCAweGZmZmZmZiwgU28gdGhlIGJhcl9zaXplIHNob3VsZCBiZSBtYW51YWxseSBzZXQgdW5kZXIgNjRLLgorKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMDcgRmViIDIwMDM6CisgICJBUEktY29tcGF0aWJpbGl0eSBwYXRjaCIgZm9yIDR4eCBJMkMgZHJpdmVyCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBKYXNvbiBKaW4gPGphc29uLmppbkBmcmVlc2NhbGUuY29tPgorKiBUUkFCIGZpeGVzIC8gZXh0ZW5zaW9uczoKKyAgLSBSZXN0b3JlIFZGRCBicmlnaHRuZXNzIGFzIHNhdmVkIGluIGVudmlyb25tZW50CisgIC0gYWRkIHN1cHBvcnQgZm9yIEZ1aml0c3UgZmxhc2hlcworICAtIG1ha2Ugc3VyZSBib3RoIGJ1enplcnMgYXJlIHR1cm5lZCBvZmYgKGRyaXZlIGxvdyBsZXZlbCkKIAotY29tbWl0IGZhN2RiOWMzNzdiYzIzNTNhMTdiZjFkMzgxZDY1YTZjNDE4NzI4ZjAKLUF1dGhvcjogSmluIFpoZW5neGlvbmctUjY0MTg4IDxKYXNvbi5KaW5AZnJlZXNjYWxlLmNvbT4KLURhdGU6CVR1ZSBKdW4gMjcgMTg6MTE6NTQgMjAwNiArMDgwMAorKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMDYgTWFyIDIwMDM6CisgIC0gZml4IGJ1ZyBpbiBCT09UUCBjb2RlIChtdXN0IHVzZSBOZXRDb3B5SVApCisgIC0gdXBkYXRlIG9mIENTQjIyNiBwb3J0CisgIC0gY2xlYXIgQlNTIHNlZ21lbnQgb24gWFNjYWxlCisgIC0gYWRkZWQgc3VwcG9ydCBmb3IgaTJjX2luaXRfYm9hcmQoKSBmdW5jdGlvbgorICAtIHVwZGF0ZSB0byB0aGUgSW5ub2tvbSBwbGF0dGZvcm0KIAotICAgIEVuYWJsZSBQQ0lFMSBmb3IgTVBDODY0MUhQQ04gYm9hcmQKKyogRXh0ZW5kIHN1cHBvcnQgZm9yIHJlZHVuZGFuZCBlbnZpcm9ubWVudHMgZm9yIGNvbmZpZ3VyYXRpb25zIHdoZXJlCisgIGVudmlyb25tZW50IHNpemUgPCBzZWN0b3Igc2l6ZQogCi0gICAgU2lnbmVkLW9mZi1ieTogSmFzb24gSmluIDxKYXNvbi5qaW5AZnJlZXNjYWxlLmNvbT4KKyogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDEzIEZlYiAyMDAzOgorICBBZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgTVBDODI2NkFEUyBib2FyZAogCi1jb21taXQgNjg0NjIzY2U5MmM1ZmQzMmU3ZGIyZDZlMDE2OTQ1YTY3YzVmZmFiYQotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgotRGF0ZToJVGh1IEp1biAyMiAwODo1MTo0NiAyMDA2IC0wNTAwCisqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAxOSBGZWIgMjAwMzoKKyAgcGF0Y2hlcyBmb3IgdGhlIEludGVsIGx1YmJvY2sgYm9hcmQ6CisgIG1lbXNldHVwLlMgLSBnZW5lcmFsIGNsZWFudXAgKGJhc2VkIG9uIFJvYmVydCdzIGNzYjIyNiBjb2RlKQorICBmbGFzaC5jIC0gb3ZlcmhhdWwsIGFjdHVhbGx5IHdvcmtzIG5vdworICBsdWJib2NrLmMgLSBmaXggaW5pdCBmdW5jcyB0byByZXR1cm4gcHJvcGVyIHZhbHVlCiAKLSAgICBGaXggYnVnIGluIDg2NDFocGNuIHJlc2V0IGNvbW1hbmQgd2l0aCBubyBhcmdzLgorKiBQYXRjaCBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMjYgRmViIDIwMDM6CisgIC0gRml4ZWQgb2ZmIGJ5IG9uZSBpbiBSRlRBIGNhbGN1bGF0aW9uLgorICAtIE5vIG5lZWQgdG8gYWJvcnQgd2hlbiBMREYgaXMgbG93ZXIgdGhhbiB3ZSBjYW4gcHJvZ3JhbSBpdCdzIG9ubHkKKyAgICBtaW5pbXVtIHRpbWluZyBzbyBjbGFtcCBpdCB0byB3aGF0IHdlIGNhbiBkby4KKyAgLSBUYWtlcyBmdW5jdGlvbiBwb2ludGVyIHRvIGZ1bmN0aW9uIGZvciByZWFkaW5nIHRoZSBzcGRfbnZyYW0uIFVzZWZ1bGwKKyAgICBmb3IgZmFraW5nIGRhdGEgb3IgaGFyZGNvZGUgYSBtb2R1bGUgd2l0aG91dCB0aGUgbnZyYW0uCisgIC0gZml4IG90aGVyIHVzZXIgZm9yIGFib3ZlIGNoYW5nZQorICAtIGZpeCBzb21lIGNvbW1lbnRzLgogCi0gICAgU2lnbmVkLW9mZi1ieTogSGFpeWluZyBXYW5nIDxoYWl5aW5nLndhbmdAZnJlZXNjYWxlLmNvbT4KLSAgICBBY2tlZC1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KKyogUGF0Y2hlcyBieSBCcmlhbiBXYWl0ZSwgMjYgRmViIDIwMDM6CisgIC0gZml4IHBvcnQgZm9yIGV2YjY0MjYwIGJvYXJkCisgIC0gZml4IFBDSSBmb3IgZXZiNjQyNjAgYm9hcmQKKyAgLSBmaXggUENJIHNjYW4KIAotY29tbWl0IDhiZTQyOWE1ZGRiZjBlYmUyZDk0MTc0YmE1OGZjZmM3YTI0Mjg1ZGMKLUF1dGhvcjogWmhhbmcgV2VpIDx3ZWkuemhhbmdAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVR1ZSBKdW4gMjAgMTc6NDc6MTUgMjAwNiArMDgwMAorKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMSBNYXIgMjAwMzoKKyAgQWRkIHN1cHBvcnQgZm9yIEVNSyBUT1A4NjAgTW9kdWxlCiAKLSAgICBSZXdvcmtlZCBJUlEgbWFwcGluZyBpbiBPRi10cmVlLgorKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAwMiBNYXIgMjAwMzoKKyAgQWRkIFNQRCBFRVBST00gc3VwcG9ydCBmb3IgTVBDODI2MEFEUyBib2FyZAogCi1jb21taXQgMGU0YzJhMTdjYTM0MDAxZWQzNmQyNTlmMTNjYjg4YWRhNDYxMWE4YwotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgotRGF0ZToJVGh1IEp1biAxNSAyMTozMzozNyAyMDA2IC0wNTAwCisqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMjEgSmFuIDIwMDM6CisgIC0gQWRkIHN1cHBvcnQgZm9yIElubm9rb20gYm9hcmQKKyAgLSBEb24ndCBjb21wbGFpbiBpZiAiaW5zdGFsbCIgZmFpbHMKKyAgLSBSRUFETUUgY2xlYW51cCAocmVtb3ZlIGR1cGxpY2F0ZWQgbGluZXMpCisgIC0gVXBkYXRlIFBYQSBoZWFkZXIgZmlsZXMKIAotICAgIERvIG5vdCBlbmFibGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBvbiBzZWNvbmRhcnkgQ1BVcy4KLSAgICBEbyBub3Qgc2V0IHVwIEJBVHMgb24gc2Vjb25kYXJ5IENQVXMuICBMZXQgTGludXggZG8gdGhlIG5hc3R5LgorKiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZXhpc3RpbmcgUE9TVCBjb2RlIChkb2MvUkVBRE1FLlBPU1QpCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorKiBQYXRjaCBieSBMYXVkbmV5IFJlbiwgMTUgSmFuIDIwMDM6CisgIEZpeCBoYW5kbGluZyBvZiByZWR1bmRhbmQgZW52aXJvbm1lbnQgaW4gInRvb2xzL2VudmNyYy5jIgogCi1jb21taXQgOGVjYzk3MTYxOGY1NjAyOWFkOTlkMzUxNmY4YjI5N2E2ZWQ1ODk3MQotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgotRGF0ZToJV2VkIEp1biA3IDEwOjUzOjU1IDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMjggRmViIDIwMDM6CisgIEFkZCBiZWRidWcgc3VwcG9ydCBmb3IgODI0eCBzeXN0ZW1zCiAKLSAgICBGaXggYSBnZXRfYm9hcmRfc3lzX2NsaygpIHVzZS1iZWZvcmUtZGVmIHdhcm5pbmcuCisqIEFkZCBzdXBwb3J0IGZvciAxNiBNQiBmbGFzaCBjb25maWd1cmF0aW9uIG9mIFRSQUIgYm9hcmQKIAotICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+CisqIFBhdGNoIGJ5IEVyd2luIFJvbCwgMjcgRmViIDIwMDM6CisgIEFkZCBzdXBwb3J0IGZvciBSVEVNUwogCi1jb21taXQgZDliZjQ4NThmY2E1YWE0ZDY1MWIyODMyNzBmNzdkYTcyZWJhZGZkNQotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgotRGF0ZToJV2VkIEp1biA3IDEwOjUyOjQ5IDIwMDYgLTA1MDAKKyogQWRkIGltYWdlIGluZm9ybWF0aW9uIHRvIFJFQURNRQogCi0gICAgQWxsb3cgRFRDIHBhdGggdG8gYmUgcGFzc2VkIGluLgorKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IEZlYiAyMDAzOgorICBDUENJSVNFUjQgY29uZmlndXJhdGlvbiB1cGRhdGVkLgogCi0gICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxNyBGZWIgMjAwMzoKKyAgRml4ZWQgYnVnIGluIGV4dC4gc2VyaWFsIGNsb2NrIHNldHVwIG9uIFBQQzQwNSAoc2luY2UgUFBDNDQwIHBvcnQpLgogCi1jb21taXQgYzgzYWU5ZWE2ZDkzYWJiZTc1MWJmOGEzMzk2MjM2YTA4NGU1NmY4NwotQXV0aG9yOiBIYWl5aW5nIFdhbmcgPGhhaXlpbmcud2FuZ0BmcmVlc2NhbGUuY29tPgotRGF0ZToJVHVlIEp1biA2IDE2OjU0OjI5IDIwMDYgLTA0MDAKKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBGZWIgMjAwMzoKKyAgQWRkICJwY2lkZWxheSIgZW52aXJvbm1lbnQgdmFyaWFibGUgKGluIG1zLCBlbmFibGVkIHZpYQorICBDT05GSUdfUENJX0JPT1RERUxBWSkuCisgIFBDSSBzcGVjIDIuMiBkZWZpbmVzLCB0aGF0IGEgcGNpIHRhcmdldCBoYXMgMl4yNSBwY2kgY2xvY2tzIGFmdGVyCisgIFJTVCMgdG8gcmVzcG9uZCB0byBjb25maWd1cmF0aW9uIGN5Y2xlcyAoMzNNSHogLT4gMXMpLgogCi0gICAgTW9kaWZ5IHRoZSBJUlEgb2YgRFVBUlQyCisqIEZpeCBkdWFsIFBDTUNJQSBzbG90IHN1cHBvcnQgKHdoZW4gcnVubmluZyB3aXRoIGp1c3Qgb25lCisgIHNsb3QgcG9wdWxhdGVkKQogCi1jb21taXQgYzkzNGY2NTVmOWFlY2E3MGE1YzVmODhiNDY1ZDllOWQ1N2E4ZDIyZQotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgotRGF0ZToJV2VkIE1heSAzMSAxMzo1NTozNSAyMDA2IC0wNTAwCisqIEFkZCBWRkQgdHlwZSBkZXRlY3Rpb24gdG8gdHJhYiBib2FyZAogCi0gICAgUmV2aWV3IGNsZWFudXBzLgorKiBleHRlbmQgZHJpdmVycy9jczg5MDAuYyBkcml2ZXIgdG8gc3luY2hyb25pemUJIGV0aGFkZHIgIGVudmlyb25tZW50CisgIHZhcmlhYmxlIHdpdGggdmFsdWUgaW4gdGhlIEVFUFJPTQogCi0gICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KKyogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBGZWIgMjAwMzoKKyAgQWRkIHN1cHBvcnQgZm9yIDRNQiBhbmQgMTI4TUIgb25ib2FyZCBTRFJBTSAoY3B1L3BwYzR4eC9zZHJhbS5jKQogCi1jb21taXQgY2I1OTY1ZmI5NWI3N2E0OWY0ZTZhZjk1MjQ4ZTBjODQ5ZjRhZjAzZQotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgotRGF0ZToJV2VkIE1heSAzMSAxMjo0NDo0NCAyMDA2IC0wNTAwCisqIEFkZCBzdXBwb3J0IGZvciBNSVBTMzIgNEtjIENQVXMKIAotICAgIFdoaXRlIHNwYWNlIGNsZWFudXAuCi0gICAgU29tZSA4MC1jb2x1bW4gY2xlYW51cHMuCi0gICAgQ29udmVydCBwcmludGYoKSB0byBwdXRzKCkgd2hlcmUgcG9zc2libGUuCi0gICAgVXNlICNpbmNsdWRlICJzcGRfc2RyYW0uaCIgYXMgbmVlZGVkLgotICAgIEVuaGFuY2VkIHJlc2V0IGNvbW1hbmQgdXNhZ2UgbWVzc2FnZSBhIGJpdC4KKyogQWRkIHN1cHBvcnQgZm9yIElOQ0EtSVAgQm9hcmQKIAotICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjI6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLWNvbW1pdCAzZDVjNWJlNTQ3NDQ1ZGQzYmQyZWI3MzY4ZDgwZGYwM2VhNDM3OTcwCi1BdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+Ci1EYXRlOglXZWQgTWF5IDMxIDExOjM5OjM0IDIwMDYgLTA1MDAKKyogQWRkIGR1YWwgZXRoZXJuZXQgc3VwcG9ydCBvbiBQTTgyNgogCi0gICAgUmVtb3ZlZCB1bm5lZWRlZCBsb2NhbF9idXNfaW5pdCgpIGZyb20gODY0MUhQQ04gYm9hcmQuCisqIEFkZCBzdXBwb3J0IGZvciBMWFQ5NzEgUEhZIG9uIFBNODI2CiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorKiBQYXRjaCBieSBUb3JkIEFuZGVyc3NvbiwgMTYgSmFuIDIwMDM6CisgIEZpeCBmbGFzaCBzZWN0b3IgY291bnQgZm9yIFRRTTh4eEwKIAotY29tbWl0IDRkM2Q3MjljMTZjMzkyZDI5ODJkMzI2NmI2NTlkMzMzYzkyNzY5N2QKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KLURhdGU6CVdlZCBNYXkgMzEgMTE6MjQ6MjggMjAwNiAtMDUwMAorKiBGaXggSTJDIEVFUFJPTSBwcm9ibGVtIG9uIElDVTg2MiBib2FyZCAod291bGQgb25seSB3cml0ZSB0aGUgZmlyc3QKKyAgMTYgYnl0ZXMgb3V0IG9mIGVhY2ggMzIgYnl0ZSBibG9jaykKIAotICAgIE1vdmVkIG1wYzg2NDFocGNuX2JvYXJkX3Jlc2V0KCkgb3V0IG9mIGNwdS8gaW50byBib2FyZC8uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjE6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgorKiBBZGQgc3VwcG9ydCBmb3IgVjM3IGJvYXJkCisgIChwYXRjaCBieSBK824gQmVuZWRpa3Rzc29uLCAxMSBEZWMgMjAwMikKIAotY29tbWl0IGIyYTk0MWRlMDYwMzUwYWQxNTg3OGQ4MjE5ODI1ZjQ5NTBlOWJiOGUKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KLURhdGU6CVdlZCBNYXkgMzEgMTA6MDc6MjggMjAwNiAtMDUwMAorKiBVcGRhdGUgYmF1ZHJhdGUgaW4gYmRfaW5mbyB3aGVuIGl0IGdldHMgY2hhbmdlZAogCi0gICAgUmVtb3ZlIGRlYWQgZGVidWcgY29kZS4KKyogQWRkIHdhdGNoZG9nIHRyaWdnZXIgcG9pbnRzIHdoaWxlIHdhaXRpbmcgZm9yIHNlcmlhbCBwb3J0CisgIChzbyBmYXIgb25seSA4eHggLS0gbmVlZGVkIG9uIExXTU9OIHdpdGggMTAwbXMgd2F0Y2hkb2cpCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgorKiBJbXByb3ZlIGNvbW1hbmQgbGluZSB0b29sIHRvIGFjY2VzcyB0aGUgVS1Cb290J3MgZW52aXJvbm1lbnQKKyAgKGZpZ3VyYXRpb24gb2YgdGhlIHV0aWxpdHksIHVzaW5nIGEgY29uZmlnIGZpbGUpCiAKLWNvbW1pdCAxMjZhYTcwZjEwYmEzZDIwZTBhNmY0ZDMyMzI4MjUwNTEzYjc3NzcwCi1BdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUdWUgTWF5IDMwIDE3OjQ3OjAwIDIwMDYgLTA1MDAKKyogQWRkIHNpbmdsZSBxdW90ZSBzdXBwb3J0IGZvciAob2xkKSBjb21tYW5kIGxpbmUgcGFyc2VyCiAKLSAgICBNb3ZlIG1wYzg2eHggUElYSVMgY29kZSB0byBib2FyZCBkaXJlY3RvcnkKKyogU3dpdGNoIExXTU9OIGJvYXJkIGRlZmF1bHQgY29uZmlnIGZyb20gRlJBTSB0byBFRVBST007CisgIGluIFBPU1QsIEVFUFJPTSBzaG93cyB1cCBvbiA4IGFkZHJlc3NlcwogCi0gICAgRmlyc3QgY3V0IGF0IG1vdmluZyB0aGUgUElYSVMgcGxhdGZvcm0gY29kZSBvdXQgb2YKLSAgICB0aGUgODZ4eCBjcHUgZGlyZWN0b3J5IGFuZCBpbnRvIGJvYXJkL21wYzg2NDFocGNuCi0gICAgd2hlcmUgaXQgYmVsb25ncy4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMDoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+CisqIFVzZSAxLWJ5dGUtcmVhZCBpbnN0ZWFkIG9mIC13cml0ZSBmb3IgaXByb2JlKCkgZnVuY3Rpb24KKyAgQWRkIGkyYyBjb21tYW5kcyB0byBQTTgyNiBjb25maWcKIAotY29tbWl0IDM4Y2VlMTJkY2ZjYzI1NzM3MWM5MDFjN2UxM2U1OGVjYWIwYTM1ZDgKLUF1dGhvcjogSGFpeWluZyBXYW5nIDxIYWl5aW5nLldhbmdAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVR1ZSBNYXkgMzAgMDk6MTA6MzIgMjAwNiAtMDUwMAorKiBleHRlbmQgSTJDIFBPU1QgY29kZTogY2hlY2sgZm9yIGxpc3Qgb24ga25vd24gYWRkcmVzc2VzCiAKLSAgICBJbXByb3ZlICJyZXNldCIgY29tbWFuZCdzIGludGVyYWN0aW9uIHdpdGggd2F0Y2hkb2cuCisqIEltcHJvdmUgbG9nIGJ1ZmZlciBjb2RlOyB1c2UgImxvZ2xldmVsIiB0byBkZWNpZGUgd2hpY2ggbWVzc2FnZXMKKyAgdG8gbG9nIG9uIHRoZSBjb25zb2xlLCB0b28gKGxpa2UgaW4gTGludXgpOyBnZXQgcmlkIG9mICJsb2dzdGFydCIKIAotCSJyZXNldCBhbHRiYW5rIiB3aWxsIHJlc2V0IGFub3RoZXIgYmFuayBXSVRIT1VUIHdhdGNoIGRvZyB0aW1lciBlbmFibGVkCi0JInJlc2V0IGFsdGJhbmsgd2QiIHdpbGwgcmVzZXQgYW5vdGhlciBiYW5rIFdJVEggd2F0Y2ggZG9nIGVuYWJsZWQKLQkiZGlzd2QiIHdpbGwgZGlzYWJsZSB3YXRjaCBkb2cgYWZ0ZXIgdS1ib290IGJvb3RzIHVwIHN1Y2Nlc3NmdWxseQorKiBBZGQgY29tbWFuZCBsaW5lIHRvb2wgdG8gYWNjZXNzIHRoZSBVLUJvb3QncyBlbnZpcm9ubWVudAorICAoYm9hcmQtc3BlY2lmaWMgZm9yIFRSQUIgbm93LCB0byBiZSBmaXhlZCBsYXRlcikKIAotICAgIFNpZ25lZC1vZmYtYnk6IEhhaXlpbmcgV2FuZyA8SGFpeWluZy5XYW5nQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoIGJ5IEhhbnMtSm9lcmcgRnJpZWRlbiwgMDYgRGVjIDIwMDIKKyAgRml4IG1pc2MgcHJvYmxlbXMgd2l0aCBBbWlnYU9uZSBzdXBwb3J0CiAKLWNvbW1pdCA3MDIwNWU1YTZkZGM4NTI4YjExZGI5ZWI0ZDNmYTAyMDlkOWZjZTJhCi1BdXRob3I6IEhhaXlpbmcgV2FuZyA8SGFpeWluZy5XYW5nQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUdWUgTWF5IDMwIDA4OjUxOjE5IDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgQ2hyaXMgSGFsbGluYW4sIDMgRGVjIDIwMDI6CisgIG1pbm9yIGNsZWFudXAgdG8gdGhlIE1QQzgyNDUgRVBJQyBkcml2ZXIKIAotICAgIEZpeCB0d28gU0RSQU0gc2V0dXAgYnVncy4KKyogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDI4IE5vdiAyMDAyCisgIEFkZCBzdXBwb3J0IGZvciBleHRlcm5hbCAoU0lVKSBpbnRlcnJ1cHRzIG9uIE1QQzh4eAogCi0JRml4IEVDQyBzZXR1cCBidWcuCi0JRW5hYmxlIDFULzJUIGJhc2VkIG9uIG51bWJlciBvZiBESU1NcyBwcmVzZW50LgorKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjggTm92IDIwMDIKKyAgRml4IG5lc3RlZCBzeXNjYWxscyBidWcgaW4gc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMKIAotICAgIFNpZ25lZC1vZmYtYnk6IEhhaXlpbmcgV2FuZyA8SGFpeWluZy5XYW5nQGZyZWVzY2FsZS5jb20+CisqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjcgTm92IDIwMDI6CisgIGZpeCBvdXRwdXQgb2YgInBjaWluZm8iIGNvbW1hbmQgZm9yIENhcmRCdXMgYnJpZGdlIGRldmljZXMuCiAKLWNvbW1pdCBkMTFmZWM1MDE1MzM0ZGViMjAxMGUzNmNlMDBiYjExOGNjNTQyOWE1Ci1BdXRob3I6IEhhaXlpbmcgV2FuZyA8SGFpeWluZy5XYW5nQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglGcmkgTWF5IDI2IDEwOjI0OjQ4IDIwMDYgLTA1MDAKKyogRml4IGJ1ZyBpbiBUUU04MjYwIGJvYXJkIGRldGVjdGlvbiAtIGJvYXJkcyBnb3Qgc3R1Y2sgd2hlbiBib2FyZCBJRAorICB3YXMgbm90IHJlYWRhYmxlCiAKLSAgICBBZGQgZmlyc3QgZHJhZnQgb2YgdGhlIE1QQzg2NDFIUENOIGRvYy9SRUFETUUuCisqIEFkZCBMRUQgaW5kaWNhdGlvbiBmb3IgSURFIGFjdGl2aXR5IG9uIEtVUDRLIGJvYXJkCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgorKiBGaXggc3RhcnR1cCBwcm9ibGVtcyB3aXRoIFZGRCBkaXNwbGF5IG9uIFRSQUIKIAotY29tbWl0IGVkNDVkNmM5MzBiNTkzOTcxOGE4N2VlMTJlMjVjZjlhMDU5NzhkNGEKLUF1dGhvcjogSGFpeWluZyBXYW5nIDxIYWl5aW5nLldhbmdAZnJlZXNjYWxlLmNvbT4KLURhdGU6CUZyaSBNYXkgMjYgMTA6MTM6MDQgMjAwNiAtMDUwMAorKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyMCBOb3YgMjAwMgorICBBZGQgZHJpdmVyIGZvciBFcHNvbiBTRUQxMzgwNiBncmFwaGljIGNvbnRyb2xsZXIuCisgIEFkZCBzdXBwb3J0IGZvciBCTVAgbG9nb3MgaW4gY2ZiX2NvbnNvbGUgZHJpdmVyLgogCi0gICAgQWRkZWQgcGNpQDgwMDAgYmxvY2suCi0gICAgVXBkYXRlZCBldGhlcm5ldCBpbnRlcnJ1cHQgbWFwcGluZ3MgKG1vdmVkIHVwIDQ4KS4KLSAgICBDbGVhbmVkIHVwIGEgZmV3IGNvbW1lbnRzLgorKiBBZGRlZCBzdXBwb3J0IGZvciBib3RoIFBDTUNJQSBzbG90cyAoYXQgdGhlIHNhbWUgdGltZSEpIG9uIE1QQzh4eAogCi0gICAgU2lnbmVkLW9mZi1ieTogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KKyogUGF0Y2ggYnkgUm9kIEJveWNlLCAyMSBOb3YgMjAwMjoKKyAgZml4IFBDTUNJQSBvbiBNQlg4eHggYm9hcmQKIAotY29tbWl0IDMwMzNlYmIyMGZkN2MzNzJjN2JjYTNjOTk1NWE0NjkyYmIyMjQwYjcKLUF1dGhvcjogSGFpeWluZyBXYW5nIDxIYWl5aW5nLldhbmdAZnJlZXNjYWxlLmNvbT4KLURhdGU6CUZyaSBNYXkgMjYgMTA6MDE6MTYgMjAwNiAtMDUwMAorKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjEgTm92IDIwMDIKKyAgQWRkIENGR19DUE1fUE9TVF9XT1JEX0FERFIgdG8gbWFrZSB0aGUgb2Zmc2V0IG9mIHRoZQorICBib290bW9kZSB3b3JkIGluIERQUkFNIGNvbmZpZ3VyYWJsZQogCi0gICAgQWxsb3cgYXJncyBvbiByZXNldCBjb21tYW5kLgorKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDE4IE5vdiAyMDAyOgorICBGaXhlcyBmb3IgeDg2IHBvcnQgKG1vc3RseSBzdHJpbmdzIGlzc3VlcykKIAotICAgIFNpZ25lZC1vZmYtYnk6IEpvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+CisqIFBhdGNoIGJ5IEtlbiBDaG91LCAxOCBOb3YgMjAwMjoKKyAgRml4IGZvciBuYXRzZW1pIE5JQyBjYXJkcyAoRFA4MzgxNSkKIAotY29tbWl0IDE0ZTM3MDgxZmYzY2FjN2ViZTZlOTM4MzY1MjM0Mjk4NTNiNmIyOTIKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KLURhdGU6CUZyaSBNYXkgMTkgMTM6Mjg6MzkgMjAwNiAtMDUwMAorKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOSBOb3YgMjAwMjoKKyAgZml4IGEgYnVnIGZvciB0aGUgTUlJIGNvbmZpZ3VyYXRpb24sIGFuZCBzb21lIHdhcm5pbmdzCiAKLSAgICBDaGFuZ2UgYXJiaXRyYXRpb24gdG8gcm91bmQtcm9iaW4gZm9yIFNNUCBsaW51eC4KKyogUGF0Y2ggYnkgVGhvbWFzIEZyaWVkZW4sIDEzIE5vdiAyMDAyOgorICBBZGQgY29kZSBmb3IgQW1pZ2FPbmUgYm9hcmQKKyAgKHByZWxpbWluYXJ5IG1lcmdlIHRvIFUtQm9vdCwgc3RpbGwgV0lQKQogCi1jb21taXQgOWE2NTU4NzZlNTk5NWJlODBmNDkwNTRlMjUwOTUwMGU4NzFlNGQzYQotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgotRGF0ZToJRnJpIE1heSAxOSAxMzoyNjozNCAyMDA2IC0wNTAwCisqIFBhdGNoIGJ5IEpvbiBEaWVrZW1hLCAxMiBOb3YgMjAwMjoKKyAgLSBBZGRpbmcgVVJMIGZvciBJRUVFIE9VSSBsb29rdXAKKyAgLSBNYWtpbmcgdGhlIGF1dG9ib290ICNkZWZpbmVzIGRlcGVuZGVudCBvbiBDT05GSUdfQVVUT0JPT1RfS0VZRUQKKyAgICBiZWluZyBkZWZpbmVkLgorICAtIEluIHRoZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTICNkZWZpbmUsIHRoZSByb290LW9uLWluaXRyZCBhbmQKKyAgICByb290LW9uLW5mcyBtYWNyb3MgYXJlIGRlc2lnbmVkIHRvIHN3aXRjaCBob3cgdGhlIGRlZmF1bHQgYm9vdAorICAgIG1ldGhvZCBnZXRzIGRlZmluZWQuCiAKLSAgICBFbmFibGUgZHVhbCBERFIgY29udHJvbGxlcnMgYW5kIGludGVybGVhdmluZy4KKyogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAxMyBOb3YgMjAwMjoKKyAgQWRkIHN1cHBvcnQgZm9yIGkzODYgYXJjaGl0ZWN0dXJlIGFuZCBBTUQgU0M1MjAgYm9hcmQKIAotY29tbWl0IDU4NmQxZDVhYmQzZTUyNWYxZTFkOWI4MWU1YTYxYTRkYTZiMmZhM2MKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4KLURhdGU6CUZyaSBNYXkgMTkgMTM6MjI6NDQgMjAwNiAtMDUwMAorKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxMiBOb3YgMjAwMjoKKyAgQWRkIHN1cHBvcnQgZm9yIERPUyBmaWxlc3lzdGVtIGFuZCBib290aW5nIGZyb20gRE9TIGZsb3BweSBkaXNrCiAKLSAgICBVcGRhdGUgODZ4eCBhZGRyZXNzIG1hcCBhbmQgTEFXQkFScy4KKyogUGF0Y2ggYnkgSmltIFNhbmRveiwgMDcgTm92IDIwMDI6CisgIEluY3JlYXNlIG51bWJlciBvZiBuZXR3b3JrIFJYIGJ1ZmZlcnMgKFBLVEJVRlNSWCBpbgorICAiaW5jbHVkZS9uZXQuaCIpIGZvciBFRVBSTzEwMCBiYXNlZCBib2FyZHMgKGVzcGVjaWFsbHkgU1A4MjQwKQorICB3aGljaCBzaG93ZWQgIlJlY2VpdmVyIGlzIG5vdCByZWFkeSIgZXJyb3JzIHdoZW4gVS1Cb290IHdhcworICBwcm9jZXNzaW5nIHRoZSByZWNlaXZlIGJ1ZmZlcnMgc2xvd2VyIHRoYW4gdGhlIG5ldHdvcmsgY29udHJvbGxlcgorICB3YXMgZmlsbGluZyB0aGVtLgogCi1jb21taXQgY2NjY2U1ZDA1ODFiYjBiYTQ2MDI3OTlhNGI1MTEyZTU4ZDE1NzljYgotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBqZGwuY29tPgotRGF0ZToJRnJpIE1heSAxOSAxMzoxNDoxNSAyMDA2IC0wNTAwCisqIFBhdGNoIGJ5IEFuZHJlYXMgT2JlcnJpdHRlciwgMDkgTm92IDIwMDI6CisgIENoYW5nZSBiZWhhdmlvdXIgb2YgTmV0TG9vcCgpOiByZXR1cm4gLTEgZm9yIGVycm9ycywgZmlsZXNpemUKKyAgb3RoZXJ3aXNlOyByZXR1cm4gY29kZSAwIGlzIHZhbGlkIGFuIG1lYW5zIG5vIGZpbGUgbG9hZGVkIC0gaW4gdGhpcworICBjYXNlIHRoZSBlbnZpcm9ubWVudCBzdGlsbCBnZXRzIHVwZGF0ZWQhCiAKLSAgICBSZW1vdmUgTDIgQ2FjaGUgaW52YWxpZGF0ZSBwb2xsaW5nLgorKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCA5IE5vdiAyMDAyOgorICAtIGltcHJvdmUgQURDL0RBQyBjbG9ja2luZyBvbiB0aGUgU0FDU25nIGJvYXJkIHRvIGFsaWduCisgICAgdGhlIGZhaWxpbmcgZWRnZXMgb2YgTFJDTEsgYW5kIFNDTEsKKyAgLSBzYmM4MjYwIGNvbmZpZ3VyYXRpb24gdHdlYWtzCisgIC0gYWRkIHN0YXR1cyBMRUQgc3VwcG9ydCBmb3IgODJ4eCBzeXN0ZW1zCisgIC0gd2lyZSBzc3BpL3NzcG8gY29tbWFuZHMgaW50byBjb21tYW5kIGhhbmRsZXI7IGltcHJvdmVkIGVycm9yCisgICAgaGFuZGxlcmluZworICAtIGFkZCB0aW1lc3RhbXAgc3VwcG9ydCBhbmQgYWx0ZXJuYXRlIG1lbW9yeSB0ZXN0IHRvIHRoZQorICAgIFNBQ1NuZyBjb25maWd1cmF0aW9uCiAKLWNvbW1pdCBmMzVlYzY4ZmIwNjZjZWMwZTM2Mjk0YmZlMDdkZWMyZDRlOGFkM2E4Ci1BdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGpkbC5jb20+Ci1EYXRlOglGcmkgTWF5IDE5IDEyOjMzOjA5IDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgVmluY2UgSHVzb3Zza3ksIDcgTm92IDIwMDI6CisgIEFkZCAiLW4iIHRvIGxpbmtlciBvcHRpb25zIHRvIGdldCByaWQgb2YgIk5vdCBlbm91Z2ggcm9vbSBmb3IKKyAgcHJvZ3JhbSBoZWFkZXJzIiBwcm9ibGVtCiAKLSAgICBFbmFibGUgMm5kIENQVSBhbmQgSTJDLgorKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDA1IE5vdiAyMDAyCisgIFJlbmFtZSBDT05GSUdfUExMX0lOUFVUX0ZSRVEgdG8gQ09ORklHX1NZU19DTEtfRlJFUQorICBzbyB3ZSBjYW4gdXNlIGFuIGFscmVhZHkgZXhpc3RpbmcgbmFtZQogCi1jb21taXQgYmY2OTBkY2I1MTJkMzRjNGZjZWVjMGViMWU1YzBlODhhOWRiNWQ1NAotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgotRGF0ZToJTW9uIE1heSAxNSAwNzoyNjo1NiAyMDA2IC0wNTAwCisqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDA1IE5vdiAyMDAyCisgIEhhcmR3YXJlIHJlbGF0aWVkIGltcHJvdm1lbnRzIGluIEZEQyBib290IGNvZGUKIAotICAgIFVwZGF0ZSBpbnRlcnJ1cHQgbWFwcGluZy4KKyogUGF0Y2ggYnkgSG9sZ2VyIFNjaHVyaWcsIDUgTm92IDIwMDI6CisgIE1ha2UgdGhlIFBYQSByZWFsbHkgY2hhbmdlIGl0J3MgZnJlcXVlbmN5CiAKLWNvbW1pdCA2Y2ZlYTMzNDc3YjA0YjYzZWQ0NzM4NmVkMTYyOTUyOTQ4NGMzM2JhCi1BdXRob3I6IEhhaXlpbmcgV2FuZyA8SGFpeWluZy5XYW5nQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglXZWQgTWF5IDEwIDA5OjM4OjA2IDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDUgTm92IDIwMDIKKyAgQWRkIHN1cHBvcnQgZm9yIHNsYXZlIHNlcmlhbCBTcGFydGFuIDIgRlBHQXMKIAotICAgIFJlbW92ZSB1bm5lZWRlZCBJTklUX1JBTV9MT0NLIGNhY2hlIHR3aWRkbGluZy4KLSAgICBDb3JyZWN0bHkgdHJhY2tzIHIyOSBhcyBnbG9iYWwgZGF0YSBwb2ludGVyIG5vdy4KKyogRml4IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChNQUMJIGFkZHJlc3MpICBpbiAgOHh4ICBTQ0MvRkVDICBldGhlcm5ldAorICBkcml2ZXJzCiAKLSAgICBTaWduZWQtb2ZmLWJ5OiBIYWl5aW5nIFdhbmcgPEhhaXlpbmcuV2FuZ0BmcmVlc2NhbGUuY29tPgorKiBBZGQgc3VwcG9ydCBmb3IgbG9nIGJ1ZmZlciB3aGljaCBjYW4gYmUgcGFzc2VkIHRvIExpbnV4IGtlcm5lbCdzCisgIHN5c2xvZyBtZWNoYW5pc207IHVzZWQgZXNwZWNpYWxseSBmb3IgUE9TVCByZXN1bHRzLgogCi1jb21taXQgZDRkZDMxN2I1OGMxMjZhMmE3ZTczZjQ3NjRlY2MxYTdjOTdmODc2YwotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgotRGF0ZToJV2VkIE1heSAxMCAwOTozMzowNyAyMDA2IC0wNTAwCisqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDMxIE9jdCAyMDAyOgorICBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBrdXA0ayBib2FyZAogCi0gICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGZsYXNoLmMgZmlsZS4KKyogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAwNCBOb3YgMjAwMjoKKyAgLSB1c2Ugd2F0Y2hkb2cgdG8gcmVzZXQgUFhBMjUwIHN5c3RlbXMKKyAgLSBhZGRlZCBwcm9ncmVzcyBjYWxsYmFja3MgdG8gKHNvbWUgb2YgdGhlKSBBUk0gY29kZQorICAtIHVwZGF0ZSBmb3IgQ29nZW50IENTQjIyNiBib2FyZAogCi1jb21taXQgMThiNmM4Y2Q4YWY2Y2M3ZjM1MTgwY2VkYzRhZGIzMjM2Y2MxYTFiOAotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgotRGF0ZToJVHVlIE1heSA5IDA4OjIzOjQ5IDIwMDYgLTA1MDAKKyogQWRkIHN1cHBvcnQgZm9yIEZQUzg2MCBib2FyZAogCi0gICAgR2V0IE1QQzg2NDFIUENOIGZsYXNoIGltYWdlcyB3b3JraW5nLgorKiBQYXRjaCBieSBHdWlsbGF1bWUgQWxleGFuZHJlLCwgMDQgTm92IDIwMDI6CisgIEltcHJvdmUgUENJIGFjY2VzcyBvbiAzMi1iaXRzIENvbXBhY3QgUENJIGJ1cwogCi0JRW5hYmxlIHRoZSBDRkkgZHJpdmVyLgotCVJlbW92ZSBib2d1cyBMQVdCQVI3IGNydWZ0LgotCVVzZSBjb3JyZWN0IFRFWFRfQkFTRSwgRml4dXAgbG9hZCBzY3JpcHQuCi0JRW5hYmxlIFNQRCBFRVBST00gZHVyaW5nIEREUiBzZXR1cC4KLQlVc2UgZ2VuZXJpYyBSRkMgMTkxOCBJUCBhZGRyZXNzZXMgYnkgZGVmYXVsdC4KKyogRml4IG1kZWxheSgpIG9uIFRSQUIgLSB0aGlzIHdhcyBzdGlsbCB0aGUgZGVidWdnaW5nIHZlcnNpb24gd2l0aAorICBzZWNvbmRzIGluc3RlYWQgb2YgbXMuCiAKLWNvbW1pdCA1YzllZmIzNmE2YjU0MzE0MjNmNTI4ODhhMGUzYjRiNTE1ZmU3ZWNhCi1BdXRob3I6IEpvbiBMb2VsaWdlciA8amRsQGZyZWVzY2FsZS5jb20+Ci1EYXRlOglUaHUgQXByIDI3IDEwOjE1OjE2IDIwMDYgLTA1MDAKKyogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxIE5vdiAyMDAyOgorICBYU2NhbGUgcmVsYXRlZCBjbGVhbnVwIChhZmZlY3RzIGFsbCBBUk0gYm9hcmRzKQogCi0gICAgQ2xlYW51cCB3aGl0ZXNwYWNlcyBhbmQgc3R5bGUgaXNzdWVzLgotICAgIFJlbW92ZWQgLy8tc3R5bGUgY29tbWVudHMuCi0gICAgVXNlIDgwLWNvbHVtbiBsaW5lcy4KLSAgICBSZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZS4KLSAgICBSZW1vdmUgZGVhZCBjb2RlIGFuZCBkZWJ1ZyBjcnVmdC4KKyogQ2xlYW51cCBvZiBuYW1lcyBhbmQgUkVBRE1FLgogCi1jb21taXQgYTIzMjBhNmJmODExM2EwOTU0NGM0MmQxNjBkMTBhYzY5ZDA0OWEwMwotQXV0aG9yOiBKb24gTG9lbGlnZXIgPGpkbEBmcmVlc2NhbGUuY29tPgotRGF0ZToJVGh1IEFwciAyNyAwODoyMjozOSAyMDA2IC0wNTAwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitOb3RlcyBmb3IgVS1Cb290IDAuMS4wOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gICAgUmV2ZXJ0IGJhZCBQQ0kgcHJlZmV0Y2ggbGltaXQgY2hhbmdlLgorVGhpcyBpcyB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mICJEYXMgVS1Cb290IiwgdGhlIFVuaXZlcnNhbCBCb290IExvYWRlci4KIAotY29tbWl0IGRlYmI3MzU0ZDFlYTRmNjk0MTU0ODE4ZGY1ZTViNTIzZjVjMWNjMWQKLUF1dGhvcjogSm9uIExvZWxpZ2VyIDxqZGxAZnJlZXNjYWxlLmNvbT4KLURhdGU6CVdlZCBBcHIgMjYgMTc6NTg6NTYgMjAwNiAtMDUwMAorSXQgaXMgYmFzZWQgb24gdmVyc2lvbiAyLjAuMCAodGhlICJIYWxsb3dlZW4gUmVsZWFzZSIpIG9mIFBQQ0Jvb3QuCitGb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhpc3Rvcnkgb2YgdGhlIHByb2plY3QgcGxlYXNlIHNlZSB0aGUKK1BQQ0Jvb3QgcHJvamVjdCBwYWdlIGF0IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcHBjYm9vdAogCi0gICAgSW5pdGlhbCBzdXBwb3J0IGZvciBNUEM4NjQxIEhQQ04gYm9hcmQuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDhiYjM4YjUuLmQ0NTM5NjcgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0yODEsNiArMjgxLDcgQEAKIAogCVRRTTg1eHgJCQlNUEM4NTQwLzg1NDEvODU1NS84NTYwCiAKKwlhbHByCQkJUFBDNDQwR1gKIAliYW1ib28JCQlQUEM0NDBFUAogCWJ1bmJpbmdhCQlQUEM0MDVFUAogCWVib255CQkJUFBDNDQwR1AKZGlmZiAtLWdpdCBhL01BS0VBTEwgYi9NQUtFQUxMCmluZGV4IDg3OWExN2YuLmE5ZWM2MGQgMTAwNzU1Ci0tLSBhL01BS0VBTEwKKysrIGIvTUFLRUFMTApAQCAtNzQsMjEgKzc0LDIxIEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIExJU1RfNHh4PSIJXAotCUFEQ0lPUAkJQVAxMDAwCQlBUjQwNQkJQVNINDA1CQlcCi0JYmFtYm9vCQlidWJpbmdhCQlDQU5CVAkJQ01TNzAwCQlcCi0JQ1BDSTJEUAkJQ1BDSTQwNQkJQ1BDSTQwNTIJQ1BDSTQwNUFCCVwKLQlDUENJNDA1RFQJQ1BDSTQ0MAkJQ1BDSUlTRVI0CUNSQVlMMQkJXAotCWNzYjI3MgkJY3NiNDcyCQlEQVNBX1NJTQlEUDQwNQkJXAotCURVNDA1CQllYm9ueQkJRVJJQwkJRVhCSVRHRU4JXAotCUcyMDAwCQlISDQwNQkJSFVCNDA1CQlKU0UJCVwKLQlLQVJFRgkJbHVhbgkJTUVUUk9CT1gJTUlQNDA1CQlcCi0JTUlQNDA1VAkJTUwyCQltbDMwMAkJb2NvdGVhCQlcCi0JT0NSVEMJCU9SU0cJCXAzcDQ0MAkJUENJNDA1CQlcCi0JcGNzNDQwZXAJUElQNDA1CQlQTFU0MDUJCVBNQzQwNQkJXAotCVBQQ2hhbWVsZW9uRVZCCXNiYzQwNQkJc2VxdW9pYQkJc2VxdW9pYV9uYW5kCVwKLQlWT0g0MDUJCVZPTTQwNQkJVzdPTE1DCQlXN09MTUcJCVwKLQl3YWxudXQJCVdVSDQwNQkJWFBFRElURTFLCXllbGxvd3N0b25lCVwKLQl5b3NlbWl0ZQl5dWNjYQkJYmFtYm9vCQlcCisJQURDSU9QCQlhbHByCQlBUDEwMDAJCUFSNDA1CQlcCisJQVNINDA1CQliYW1ib28JCWJ1YmluZ2EJCUNBTkJUCQlcCisJQ01TNzAwCQlDUENJMkRQCQlDUENJNDA1CQlDUENJNDA1MglcCisJQ1BDSTQwNUFCCUNQQ0k0MDVEVAlDUENJNDQwCQlDUENJSVNFUjQJXAorCUNSQVlMMQkJY3NiMjcyCQljc2I0NzIJCURBU0FfU0lNCVwKKwlEUDQwNQkJRFU0MDUJCWVib255CQlFUklDCQlcCisJRVhCSVRHRU4JRzIwMDAJCUhINDA1CQlIVUI0MDUJCVwKKwlKU0UJCUtBUkVGCQlsdWFuCQlNRVRST0JPWAlcCisJTUlQNDA1CQlNSVA0MDVUCQlNTDIJCW1sMzAwCQlcCisJb2NvdGVhCQlPQ1JUQwkJT1JTRwkJcDNwNDQwCQlcCisJUENJNDA1CQlwY3M0NDBlcAlQSVA0MDUJCVBMVTQwNQkJXAorCVBNQzQwNQkJUFBDaGFtZWxlb25FVkIJc2JjNDA1CQlzZXF1b2lhCQlcCisJc2VxdW9pYV9uYW5kCVZPSDQwNQkJVk9NNDA1CQlXN09MTUMJCVwKKwlXN09MTUcJCXdhbG51dAkJV1VINDA1CQlYUEVESVRFMUsJXAorCXllbGxvd3N0b25lCXlvc2VtaXRlCXl1Y2NhCQliYW1ib28JCVwKICIKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA1MzE2NTA0Li4zN2Q3ODJkIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtOTg0LDYgKzk4NCw5IEBACiBBRENJT1BfY29uZmlnOgl1bmNvbmZpZwogCUAkKE1LQ09ORklHKSAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggYWRjaW9wIGVzZAogCithbHByX2NvbmZpZzoJdW5jb25maWcKKwlALi9ta2NvbmZpZyAkKEA6X2NvbmZpZz0pIHBwYyBwcGM0eHggYWxwciBwcm9kcml2ZQorCiBBUDEwMDBfY29uZmlnOnVuY29uZmlnCiAJQCQoTUtDT05GSUcpICQoQDpfY29uZmlnPSkgcHBjIHBwYzR4eCBhcDEwMDAgYW1pcml4CiAKZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MveWVsbG93c3RvbmUveWVsbG93c3RvbmUuYyBiL2JvYXJkL2FtY2MveWVsbG93c3RvbmUveWVsbG93c3RvbmUuYwppbmRleCA5MmRjOWQ0Li43NTRhZTQ0IDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL3llbGxvd3N0b25lL3llbGxvd3N0b25lLmMKKysrIGIvYm9hcmQvYW1jYy95ZWxsb3dzdG9uZS95ZWxsb3dzdG9uZS5jCkBAIC01NTIsMyArNTUyLDkgQEAKIAogfQogI2VuZGlmCisKK3ZvaWQgYm9hcmRfcmVzZXQodm9pZCkKK3sKKwkvKiBnaXZlIHJlc2V0IHRvIEJDU1IgKi8KKwkqKHVuc2lnbmVkIGNoYXIgKikoQ0ZHX0JDU1JfQkFTRSB8IDB4MDYpID0gMHgwOTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL2FtY2MveW9zZW1pdGUveW9zZW1pdGUuYyBiL2JvYXJkL2FtY2MveW9zZW1pdGUveW9zZW1pdGUuYwppbmRleCA3ZjJlNzE4Li41ODhlZTkwIDEwMDY0NAotLS0gYS9ib2FyZC9hbWNjL3lvc2VtaXRlL3lvc2VtaXRlLmMKKysrIGIvYm9hcmQvYW1jYy95b3NlbWl0ZS95b3NlbWl0ZS5jCkBAIC01NDgsMyArNTQ4LDkgQEAKIAogfQogI2VuZGlmCisKK3ZvaWQgYm9hcmRfcmVzZXQodm9pZCkKK3sKKwkvKiBnaXZlIHJlc2V0IHRvIEJDU1IgKi8KKwkqKHVuc2lnbmVkIGNoYXIgKikoQ0ZHX0JDU1JfQkFTRSB8IDB4MDYpID0gMHgwOTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL3Byb2RyaXZlL2FscHIvTWFrZWZpbGUgYi9ib2FyZC9wcm9kcml2ZS9hbHByL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMjRhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9wcm9kcml2ZS9hbHByL01ha2VmaWxlCkBAIC0wLDAgKzEsNTEgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDA2CisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSAkKG9iailsaWIkKEJPQVJEKS5hCisKK0NPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vIGZwZ2EubyBuYW5kLm8KK1NPQkpTCT0gaW5pdC5vCisKK1NSQ1MJOj0gJChTT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykKK09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoQ09CSlMpKQorU09CSlMJOj0gJChhZGRwcmVmaXggJChvYmopLCQoU09CSlMpKQorCiskKExJQik6CSQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJChPQkpTKQorCitjbGVhbjoKKwlybSAtZiAkKFNPQkpTKSAkKE9CSlMpCisKK2Rpc3RjbGVhbjoJY2xlYW4KKwlybSAtZiAkKExJQikgY29yZSAqLmJhayAuZGVwZW5kICp+CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBkZWZpbmVzICQob2JqKS5kZXBlbmQgdGFyZ2V0CitpbmNsdWRlICQoU1JDVFJFRSkvcnVsZXMubWsKKworc2luY2x1ZGUgJChvYmopLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9wcm9kcml2ZS9hbHByL2FscHIuYyBiL2JvYXJkL3Byb2RyaXZlL2FscHIvYWxwci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NDM1YmYKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9wcm9kcml2ZS9hbHByL2FscHIuYwpAQCAtMCwwICsxLDI4NCBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNgorICogU3RlZmFuIFJvZXNlLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBzckBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxzcGRfc2RyYW0uaD4KKyNpbmNsdWRlIDxwcGM0eHhfZW5ldC5oPgorCitERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworZXh0ZXJuIGludCBhbHByX2ZwZ2FfaW5pdCh2b2lkKTsKKworaW50IGJvYXJkX2Vhcmx5X2luaXRfZiAodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG1mcjsKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgIHwgSW5pdGlhbGl6ZSBFQkMgQ09ORklHCisJICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWYgMAorCW10ZWJjKHhiY2ZnLCBFQkNfQ0ZHX0xFX1VOTE9DSyB8CisJICAgICAgRUJDX0NGR19QVERfRU5BQkxFIHwgRUJDX0NGR19SVENfNjRQRVJDTEsgfAorCSAgICAgIEVCQ19DRkdfQVRDX1BSRVZJT1VTIHwgRUJDX0NGR19EVENfUFJFVklPVVMgfAorCSAgICAgIEVCQ19DRkdfQ1RDX1BSRVZJT1VTIHwgRUJDX0NGR19FTUNfTk9OREVGQVVMVCB8CisJICAgICAgRUJDX0NGR19QTUVfRElTQUJMRSB8IEVCQ19DRkdfUFJfMzIpOworI2Vsc2UKKwltdGViYyh4YmNmZywgRUJDX0NGR19MRV9VTkxPQ0sgfAorCSAgICAgIEVCQ19DRkdfUFREX0RJU0FCTEUgfCBFQkNfQ0ZHX1JUQ182NFBFUkNMSyB8CisJICAgICAgRUJDX0NGR19BVENfUFJFVklPVVMgfCBFQkNfQ0ZHX0RUQ19QUkVWSU9VUyB8CisJICAgICAgRUJDX0NGR19DVENfUFJFVklPVVMgfCBFQkNfQ0ZHX0VNQ19OT05ERUZBVUxUIHwKKwkgICAgICBFQkNfQ0ZHX1BNRV9ESVNBQkxFIHwgRUJDX0NGR19QUl8zMik7CisjZW5kaWYKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBTZXR1cCB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgcG9sYXJpdGllcywgdHJpZ2dlcnMsIGV0Yy4KKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCW10ZGNyICh1aWMwc3IsIDB4ZmZmZmZmZmYpOwkvKiBjbGVhciBhbGwgKi8KKwltdGRjciAodWljMGVyLCAweDAwMDAwMDAwKTsJLyogZGlzYWJsZSBhbGwgKi8KKwltdGRjciAodWljMGNyLCAweDAwMDAwMDA5KTsJLyogU01JICYgVUlDMSBjcml0IGFyZSBjcml0aWNhbCAqLworCW10ZGNyICh1aWMwcHIsIDB4ZmZmZmZlMTMpOwkvKiBwZXIgcmVmLWJvYXJkIG1hbnVhbCAqLworCW10ZGNyICh1aWMwdHIsIDB4MDFjMDAwMDgpOwkvKiBwZXIgcmVmLWJvYXJkIG1hbnVhbCAqLworCW10ZGNyICh1aWMwdnIsIDB4MDAwMDAwMDEpOwkvKiBpbnQzMSBoaWdoZXN0LCBiYXNlPTB4MDAwICovCisJbXRkY3IgKHVpYzBzciwgMHhmZmZmZmZmZik7CS8qIGNsZWFyIGFsbCAqLworCisJbXRkY3IgKHVpYzFzciwgMHhmZmZmZmZmZik7CS8qIGNsZWFyIGFsbCAqLworCW10ZGNyICh1aWMxZXIsIDB4MDAwMDAwMDApOwkvKiBkaXNhYmxlIGFsbCAqLworCW10ZGNyICh1aWMxY3IsIDB4MDAwMDAwMDApOwkvKiBhbGwgbm9uLWNyaXRpY2FsICovCisJbXRkY3IgKHVpYzFwciwgMHhmZmZmZTBmZik7CS8qIHBlciByZWYtYm9hcmQgbWFudWFsICovCisJbXRkY3IgKHVpYzF0ciwgMHgwMGZmYzAwMCk7CS8qIHBlciByZWYtYm9hcmQgbWFudWFsICovCisJbXRkY3IgKHVpYzF2ciwgMHgwMDAwMDAwMSk7CS8qIGludDMxIGhpZ2hlc3QsIGJhc2U9MHgwMDAgKi8KKwltdGRjciAodWljMXNyLCAweGZmZmZmZmZmKTsJLyogY2xlYXIgYWxsICovCisKKwltdGRjciAodWljMnNyLCAweGZmZmZmZmZmKTsJLyogY2xlYXIgYWxsICovCisJbXRkY3IgKHVpYzJlciwgMHgwMDAwMDAwMCk7CS8qIGRpc2FibGUgYWxsICovCisJbXRkY3IgKHVpYzJjciwgMHgwMDAwMDAwMCk7CS8qIGFsbCBub24tY3JpdGljYWwgKi8KKwltdGRjciAodWljMnByLCAweGZmZmZmZmZmKTsJLyogcGVyIHJlZi1ib2FyZCBtYW51YWwgKi8KKwltdGRjciAodWljMnRyLCAweDAwZmY4YzBmKTsJLyogcGVyIHJlZi1ib2FyZCBtYW51YWwgKi8KKwltdGRjciAodWljMnZyLCAweDAwMDAwMDAxKTsJLyogaW50MzEgaGlnaGVzdCwgYmFzZT0weDAwMCAqLworCW10ZGNyICh1aWMyc3IsIDB4ZmZmZmZmZmYpOwkvKiBjbGVhciBhbGwgKi8KKworCW10ZGNyICh1aWNiMHNyLCAweGZjMDAwMDAwKTsgLyogY2xlYXIgYWxsICovCisJbXRkY3IgKHVpY2IwZXIsIDB4MDAwMDAwMDApOyAvKiBkaXNhYmxlIGFsbCAqLworCW10ZGNyICh1aWNiMGNyLCAweDAwMDAwMDAwKTsgLyogYWxsIG5vbi1jcml0aWNhbCAqLworCW10ZGNyICh1aWNiMHByLCAweGZjMDAwMDAwKTsgLyogKi8KKwltdGRjciAodWljYjB0ciwgMHgwMDAwMDAwMCk7IC8qICovCisJbXRkY3IgKHVpY2IwdnIsIDB4MDAwMDAwMDEpOyAvKiAqLworCW1mc2RyIChzZHJfbWZyLCBtZnIpOworCW1mciAmPSB+U0RSMF9NRlJfRUNTX01BU0s7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNoZWNrYm9hcmQgKHZvaWQpCit7CisJY2hhciAqcyA9IGdldGVudiAoInNlcmlhbCMiKTsKKworCXByaW50ZiAoIkJvYXJkOiBBTFBSIik7CisJaWYgKHMgIT0gTlVMTCkgeworCQlwdXRzICgiLCBzZXJpYWwjICIpOworCQlwdXRzIChzKTsKKwl9CisJcHV0YyAoJ1xuJyk7CisKKwlyZXR1cm4gKDApOworfQorCisjaWYgZGVmaW5lZChDRkdfRFJBTV9URVNUKQoraW50IHRlc3RkcmFtICh2b2lkKQoreworCXVpbnQgKnBzdGFydCA9ICh1aW50ICopIDB4MDAwMDAwMDA7CisJdWludCAqcGVuZCA9ICh1aW50ICopIDB4MDgwMDAwMDA7CisJdWludCAqcDsKKworCWZvciAocCA9IHBzdGFydDsgcCA8IHBlbmQ7IHArKykKKwkJKnAgPSAweGFhYWFhYWFhOworCisJZm9yIChwID0gcHN0YXJ0OyBwIDwgcGVuZDsgcCsrKSB7CisJCWlmICgqcCAhPSAweGFhYWFhYWFhKSB7CisJCQlwcmludGYgKCJTRFJBTSB0ZXN0IGZhaWxzIGF0OiAlMDh4XG4iLCAodWludCkgcCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWZvciAocCA9IHBzdGFydDsgcCA8IHBlbmQ7IHArKykKKwkJKnAgPSAweDU1NTU1NTU1OworCisJZm9yIChwID0gcHN0YXJ0OyBwIDwgcGVuZDsgcCsrKSB7CisJCWlmICgqcCAhPSAweDU1NTU1NTU1KSB7CisJCQlwcmludGYgKCJTRFJBTSB0ZXN0IGZhaWxzIGF0OiAlMDh4XG4iLCAodWludCkgcCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHBjaV9wcmVfaW5pdAorICoKKyAqICBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGp1c3QgcHJpb3IgdG8gcmVnaXN0ZXJpbmcgdGhlIGhvc2UgYW5kIGdpdmVzCisgKiAgdGhlIGJvYXJkIHRoZSBvcHBvcnR1bml0eSB0byBjaGVjayB0aGluZ3MuIFJldHVybmluZyBhIHZhbHVlIG9mIHplcm8KKyAqICBpbmRpY2F0ZXMgdGhhdCB0aGluZ3MgYXJlIGJhZCAmIFBDSSBpbml0aWFsaXphdGlvbiBzaG91bGQgYmUgYWJvcnRlZC4KKyAqCisgKglEaWZmZXJlbnQgYm9hcmRzIG1heSB3aXNoIHRvIGN1c3RvbWl6ZSB0aGUgcGNpIGNvbnRyb2xsZXIgc3RydWN0dXJlCisgKgkoYWRkIHJlZ2lvbnMsIG92ZXJyaWRlIGRlZmF1bHQgYWNjZXNzIHJvdXRpbmVzLCBldGMpIG9yIHBlcmZvcm0KKyAqCWNlcnRhaW4gcHJlLWluaXRpYWxpemF0aW9uIGFjdGlvbnMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ0ZHX1BDSV9QUkVfSU5JVCkKK2ludCBwY2lfcHJlX2luaXQoc3RydWN0IHBjaV9jb250cm9sbGVyICogaG9zZSApCit7CisJdW5zaWduZWQgbG9uZyBzdHJhcDsKKworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICoJVGhlIG9jb3RlYSBib2FyZCBpcyBhbHdheXMgY29uZmlndXJlZCBhcyB0aGUgaG9zdCAmIHJlcXVpcmVzIHRoZQorCSAqCVBDSSBhcmJpdGVyIHRvIGJlIGVuYWJsZWQuCisJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJbWZzZHIoc2RyX3Nkc3RwMSwgc3RyYXApOworCWlmKCAoc3RyYXAgJiBTRFIwX1NEU1RQMV9QQUVfTUFTSykgPT0gMCApeworCQlwcmludGYoIlBDSTogU0RSMF9TVFJQMVslMDhsWF0gLSBQQ0kgQXJiaXRlciBkaXNhYmxlZC5cbiIsc3RyYXApOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBGUEdBIEluaXQgKi8KKwlhbHByX2ZwZ2FfaW5pdCAoKTsKKworCXJldHVybiAxOworfQorI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1BDSSkgJiYgZGVmaW5lZChDRkdfUENJX1BSRV9JTklUKSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHBjaV90YXJnZXRfaW5pdAorICoKKyAqCVRoZSBib290c3RyYXAgY29uZmlndXJhdGlvbiBwcm92aWRlcyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgcGNpCisgKglpbmJvdW5kIG1hcCAoUElNKS4gQnV0IHRoZSBib290c3RyYXAgY29uZmlnIGNob2ljZXMgYXJlIGxpbWl0ZWQgYW5kCisgKgltYXkgbm90IGJlIHN1ZmZpY2llbnQgZm9yIGEgZ2l2ZW4gYm9hcmQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ0ZHX1BDSV9UQVJHRVRfSU5JVCkKK3ZvaWQgcGNpX3RhcmdldF9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqIGhvc2UgKQoreworCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICogRGlzYWJsZSBldmVyeXRoaW5nCisJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJb3V0MzJyKCBQQ0lYMF9QSU0wU0EsIDAgKTsgLyogZGlzYWJsZSAqLworCW91dDMyciggUENJWDBfUElNMVNBLCAwICk7IC8qIGRpc2FibGUgKi8KKwlvdXQzMnIoIFBDSVgwX1BJTTJTQSwgMCApOyAvKiBkaXNhYmxlICovCisJb3V0MzJyKCBQQ0lYMF9FUk9NQkEsIDAgKTsgLyogZGlzYWJsZSBleHBhbnNpb24gcm9tICovCisKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAqIE1hcCBhbGwgb2YgU0RSQU0gdG8gUENJIGFkZHJlc3MgMHgwMDAwXzAwMDAuIE5vdGUgdGhhdCB0aGUgNDQwIHN0cmFwcGluZworCSAqIG9wdGlvbnMgdG8gbm90IHN1cHBvcnQgc2l6ZXMgc3VjaCBhcyAxMjgvMjU2IE1CLgorCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCW91dDMyciggUENJWDBfUElNMExBTCwgQ0ZHX1NEUkFNX0JBU0UgKTsKKwlvdXQzMnIoIFBDSVgwX1BJTTBMQUgsIDAgKTsKKwlvdXQzMnIoIFBDSVgwX1BJTTBTQSwgfihnZC0+cmFtX3NpemUgLSAxKSB8IDEgKTsKKworCW91dDMyciggUENJWDBfQkFSMCwgMCApOworCisJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgKiBQcm9ncmFtIHRoZSBib2FyZCdzIHN1YnN5c3RlbSBpZC92ZW5kb3IgaWQKKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlvdXQxNnIoIFBDSVgwX1NCU1lTVklELCBDRkdfUENJX1NVQlNZU19WRU5ET1JJRCApOworCW91dDE2ciggUENJWDBfU0JTWVNJRCwgQ0ZHX1BDSV9TVUJTWVNfREVWSUNFSUQgKTsKKworCW91dDE2ciggUENJWDBfQ01ELCBpbjE2cihQQ0lYMF9DTUQpIHwgUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfTUFTVEVSKTsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ0ZHX1BDSV9UQVJHRVRfSU5JVCkgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBpc19wY2lfaG9zdAorICoKKyAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcGNpIHNjYW4gc2hvdWxkIGJlCisgKglwZXJmb3JtZWQuIFdpdGggdmFyaW91cyBoYXJkd2FyZSBlbnZpcm9ubWVudHMgKGVzcGVjaWFsbHkgY1BDSSBhbmQKKyAqCVBQTUMpIGl0J3MgaW5zdWZmaWNpZW50IHRvIGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YgdGhlIGFyYml0ZXIgZW5hYmxlCisgKgliaXQgaW4gdGhlIHN0cmFwIHJlZ2lzdGVyLCBvciBnZW5lcmljIGhvc3QvYWRhcHRlciBhc3N1bXB0aW9ucy4KKyAqCisgKglSYXRoZXIgdGhhbiBoYXJkLWNvZGUgYSBiYWQgYXNzdW1wdGlvbiBpbiB0aGUgZ2VuZXJhbCA0NDAgY29kZSwgdGhlCisgKgk0NDAgcGNpIGNvZGUgcmVxdWlyZXMgdGhlIGJvYXJkIHRvIGRlY2lkZSBhdCBydW50aW1lLgorICoKKyAqCVJldHVybiAwIGZvciBhZGFwdGVyIG1vZGUsIG5vbi16ZXJvIGZvciBob3N0IChtb25hcmNoKSBtb2RlLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKK2ludCBpc19wY2lfaG9zdChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpCit7CisgICAgLyogVGhlIG9jb3RlYSBib2FyZCBpcyBhbHdheXMgY29uZmlndXJlZCBhcyBob3N0LiAqLworICAgIHJldHVybigxKTsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19QQ0kpICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgcGNpX21hc3Rlcl9pbml0CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ0ZHX1BDSV9NQVNURVJfSU5JVCkKK3ZvaWQgcGNpX21hc3Rlcl9pbml0KHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKK3sKKwkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgfCBQb3dlclBDNDQwIFBDSSBNYXN0ZXIgY29uZmlndXJhdGlvbi4KKwkgIHwgTWFwIFBMQi9wcm9jZXNzb3IgYWRkcmVzc2VzIHRvIFBDSSBtZW1vcnkgc3BhY2UuCisJICB8ICAgUExCIGFkZHJlc3MgMHhBMDAwMDAwMC0weENGRkZGRkZGID09PiBQQ0kgYWRkcmVzcyAweDgwMDAwMDAwLTB4Q0ZGRkZGRkYKKwkgIHwgICBVc2UgYnl0ZSByZXZlcnNlZCBvdXQgcm91dGluZXMgdG8gaGFuZGxlIGVuZGlhbmVzcy4KKwkgIHwgTWFrZSB0aGlzIHJlZ2lvbiBub24tcHJlZmV0Y2hhYmxlLgorCSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwlvdXQzMnIoIFBDSVgwX1BPTTBTQSwgMCApOyAvKiBkaXNhYmxlICovCisJb3V0MzJyKCBQQ0lYMF9QT00xU0EsIDAgKTsgLyogZGlzYWJsZSAqLworCW91dDMyciggUENJWDBfUE9NMlNBLCAwICk7IC8qIGRpc2FibGUgKi8KKworCW91dDMycihQQ0lYMF9QT00wTEFMLCBDRkdfUENJX01FTUJBU0UpOwkvKiBQTU0wIExvY2FsIEFkZHJlc3MgKi8KKwlvdXQzMnIoUENJWDBfUE9NMExBSCwgMHgwMDAwMDAwMyk7CS8qIFBNTTAgTG9jYWwgQWRkcmVzcyAqLworCW91dDMycihQQ0lYMF9QT00wUENJQUwsIENGR19QQ0lfTUVNQkFTRSk7CS8qIFBNTTAgUENJIExvdyBBZGRyZXNzICovCisJb3V0MzJyKFBDSVgwX1BPTTBQQ0lBSCwgMHgwMDAwMDAwMCk7CS8qIFBNTTAgUENJIEhpZ2ggQWRkcmVzcyAqLworCW91dDMycihQQ0lYMF9QT00wU0EsIH4oMHgxMDAwMDAwMCAtIDEpIHwgMSk7CS8qIDI1Nk1CICsgZW5hYmxlIHJlZ2lvbiAqLworCisJb3V0MzJyKFBDSVgwX1BPTTFMQUwsIENGR19QQ0lfTUVNQkFTRTIpOwkvKiBQTU0wIExvY2FsIEFkZHJlc3MgKi8KKwlvdXQzMnIoUENJWDBfUE9NMUxBSCwgMHgwMDAwMDAwMyk7CS8qIFBNTTAgTG9jYWwgQWRkcmVzcyAqLworCW91dDMycihQQ0lYMF9QT00xUENJQUwsIENGR19QQ0lfTUVNQkFTRTIpOwkvKiBQTU0wIFBDSSBMb3cgQWRkcmVzcyAqLworCW91dDMycihQQ0lYMF9QT00xUENJQUgsIDB4MDAwMDAwMDApOwkvKiBQTU0wIFBDSSBIaWdoIEFkZHJlc3MgKi8KKwlvdXQzMnIoUENJWDBfUE9NMVNBLCB+KDB4MTAwMDAwMDAgLSAxKSB8IDEpOwkvKiAyNTZNQiArIGVuYWJsZSByZWdpb24gKi8KK30KKyNlbmRpZgkJCQkvKiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ0ZHX1BDSV9NQVNURVJfSU5JVCkgKi8KKworI2lmZGVmIENPTkZJR19QT1NUCisvKgorICogUmV0dXJucyAxIGlmIGtleXMgcHJlc3NlZCB0byBzdGFydCB0aGUgcG93ZXItb24gbG9uZy1ydW5uaW5nIHRlc3RzCisgKiBDYWxsZWQgZnJvbSBib2FyZF9pbml0X2YoKS4KKyAqLworaW50IHBvc3RfaG90a2V5c19wcmVzc2VkKHZvaWQpCit7CisKKwlyZXR1cm4gKGN0cmxjKCkpOworfQorI2VuZGlmCisKK3ZvaWQgYm9hcmRfcmVzZXQodm9pZCkKK3sKKwkvKgorCSAqIEluaXRpYXRlIGNoaXAgcmVzZXQgaW4gZGVidWcgY29udHJvbCByZWdpc3RlciBEQkNSCisJICovCisJbXRzcHIoZGJjcjAsIDB4MjAwMDAwMDApOworfQpkaWZmIC0tZ2l0IGEvYm9hcmQvcHJvZHJpdmUvYWxwci9jb25maWcubWsgYi9ib2FyZC9wcm9kcml2ZS9hbHByL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTE4MzM1Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvcHJvZHJpdmUvYWxwci9jb25maWcubWsKQEAgLTAsMCArMSw0NCBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDQKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyMgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworIworIyBBTUNDIDQ0MEdYIFJlZmVyZW5jZSBQbGF0Zm9ybSAoT2NvdGVhKSBib2FyZAorIworCisjVEVYVF9CQVNFID0gMHhGRkZFMDAwMAorCitpZmVxICgkKHJhbXN5bSksMSkKK1RFWFRfQkFTRSA9IDB4MDdGRDAwMDAKK2Vsc2UKK1RFWFRfQkFTRSA9IDB4RkZGQzAwMDAKK2VuZGlmCisKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1EQ09ORklHXzQ0MD0xCisKK2lmZXEgKCQoZGVidWcpLDEpCitQTEFURk9STV9DUFBGTEFHUyArPSAtRERFQlVHCitlbmRpZgorCitpZmVxICgkKGRiY3IpLDEpCitQTEFURk9STV9DUFBGTEFHUyArPSAtRENGR19JTklUX0RCQ1I9MHg4Y2ZmMDAwMAorZW5kaWYKZGlmZiAtLWdpdCBhL2JvYXJkL3Byb2RyaXZlL2FscHIvZmxhc2guYyBiL2JvYXJkL3Byb2RyaXZlL2FscHIvZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmEwMDg0Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvcHJvZHJpdmUvYWxwci9mbGFzaC5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIFN0ZWZhbiBSb2VzZSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgc3JAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisKKy8qCisgKiBpbmNsdWRlIGNvbW1vbiBmbGFzaCBjb2RlIChmb3IgZXNkIGJvYXJkcykKKyAqLworI2luY2x1ZGUgIi4uL2NvbW1vbi9mbGFzaC5jIgorCisvKgorICogUHJvdG90eXBlcworICovCitzdGF0aWMgdWxvbmcgZmxhc2hfZ2V0X3NpemUgKHZ1X2xvbmcgKiBhZGRyLCBmbGFzaF9pbmZvX3QgKiBpbmZvKTsKKwordW5zaWduZWQgbG9uZyBmbGFzaF9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCBpOworCisJLyogSW5pdDogbm8gRkxBU0hlcyBrbm93biAqLworCWZvciAoaT0wOyBpPENGR19NQVhfRkxBU0hfQkFOS1M7IGkrKykKKwkJZmxhc2hfaW5mb1tpXS5mbGFzaF9pZCA9IEZMQVNIX1VOS05PV047CisKKwlzaXplID0gZmxhc2hfZ2V0X3NpemUoKHZ1X2xvbmcgKilGTEFTSF9CQVNFMF9QUkVMSU0sICZmbGFzaF9pbmZvWzBdKTsKKworCWlmIChmbGFzaF9pbmZvWzBdLmZsYXNoX2lkID09IEZMQVNIX1VOS05PV04pCisJCXByaW50ZiAoIiMjIFVua25vd24gRkxBU0ggb24gQmFuayAwIC0gU2l6ZSA9IDB4JTA4bHggPSAlbGQgTUJcbiIsCisJCQlzaXplLCBzaXplPDwyMCk7CisKKwkvKiBNb25pdG9yIHByb3RlY3Rpb24gT04gYnkgZGVmYXVsdCAqLworCWZsYXNoX3Byb3RlY3QoRkxBR19QUk9URUNUX1NFVCwgLUNGR19NT05JVE9SX0xFTiwgMHhmZmZmZmZmZiwKKwkJICAgICAgJmZsYXNoX2luZm9bMF0pOworCisJLyogRW52aXJvbm1lbnQgcHJvdGVjdGlvbiBPTiBieSBkZWZhdWx0ICovCisJZmxhc2hfcHJvdGVjdChGTEFHX1BST1RFQ1RfU0VULAorCQkgICAgICBDRkdfRU5WX0FERFIsCisJCSAgICAgIENGR19FTlZfQUREUiArIENGR19FTlZfU0VDVF9TSVpFIC0gMSwKKwkJICAgICAgJmZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LUyAtIDFdKTsKKworCS8qIFJlZHVuZGFudCBlbnZpcm9ubWVudCBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KKwlmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCisJCSAgICAgIENGR19FTlZfQUREUl9SRURVTkQsCisJCSAgICAgIENGR19FTlZfQUREUl9SRURVTkQgKyBDRkdfRU5WX1NJWkVfUkVEVU5EIC0gMSwKKwkJICAgICAgJmZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LUyAtIDFdKTsKKworCWZsYXNoX2luZm9bMF0uc2l6ZSA9IHNpemU7CisKKwlyZXR1cm4gc2l6ZTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL3Byb2RyaXZlL2FscHIvZnBnYS5jIGIvYm9hcmQvcHJvZHJpdmUvYWxwci9mcGdhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgzMDdiNAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3Byb2RyaXZlL2FscHIvZnBnYS5jCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBIZWlrbyBTY2hvY2hlciwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgaHNAZGVueC5kZQorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisvKgorICogQWx0ZXJhIEZQR0EgY29uZmlndXJhdGlvbiBzdXBwb3J0IGZvciB0aGUgQUxQUiBjb21wdXRlciBmcm9tIHByb2RyaXZlCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFsdGVyYS5oPgorI2luY2x1ZGUgPEFDRVgxSy5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKyNpbmNsdWRlIDxhc20tcHBjL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPHBwYzQ0MC5oPgorI2luY2x1ZGUgImZwZ2EuaCIKKworREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKyNpZiAoQ09ORklHX0ZQR0EpCisKKyNpZmRlZiBGUEdBX0RFQlVHCisjZGVmaW5lCVBSSU5URihmbXQsYXJncy4uLikJcHJpbnRmIChmbXQgLCMjYXJncykKKyNlbHNlCisjZGVmaW5lCVBSSU5URihmbXQsYXJncy4uLikKKyNlbmRpZgorCitzdGF0aWMJdW5zaWduZWQgbG9uZwlyZWd2YWw7CisKKyNkZWZpbmUgU0VUX0dQSU9fUkVHXzAocmVnLCBiaXQpIHtcCisJCQkJCXJlZ3ZhbCA9IGluMzIocmVnKTtcCisJCQkJCXJlZ3ZhbCAmPSB+KDB4ODAwMDAwMDAgPj4gYml0KTtcCisJCQkJCW91dDMyKHJlZywgcmVndmFsKTtcCisJCQkJCX0KKworI2RlZmluZSBTRVRfR1BJT19SRUdfMShyZWcsIGJpdCkge1wKKwkJCQkJcmVndmFsID0gaW4zMihyZWcpO1wKKwkJCQkJcmVndmFsIHw9ICgweDgwMDAwMDAwID4+IGJpdCk7XAorCQkJCQlvdXQzMihyZWcsIHJlZ3ZhbCk7XAorCQkJCQl9CisKKyNkZWZpbmUJR1BJT19DTEtfUElOCQkJMHgwMDAwMjAwMAorI2RlZmluZQlHUElPX0NMS19QSU5fSQkJCTB4ZmZmZmRmZmYKKyNkZWZpbmUgR1BJT19EQVRfUElOCQkJMHgwMDAwMTAwMAorI2RlZmluZSBHUElPX0RBVF9QSU5fSQkJCTB4ZmZmZmVmZmYKKyNkZWZpbmUgR1BJT19DTEtEQVRfUElOX0kJCTB4ZmZmZmNmZmYKKworI2RlZmluZSBTRVRfR1BJT19DTEtfMAkJCW91dDMyKEdQSU8wX09SLCBpbjMyKEdQSU8wX09SKSAmIEdQSU9fQ0xLX1BJTl9JKTsKKyNkZWZpbmUgU0VUX0dQSU9fQ0xLXzEJCQlvdXQzMihHUElPMF9PUiwgaW4zMihHUElPMF9PUikgfCBHUElPX0NMS19QSU4pOworI2RlZmluZSBTRVRfR1BJT19EQVRfMAkJCW91dDMyKEdQSU8wX09SLCBpbjMyKEdQSU8wX09SKSAmIEdQSU9fREFUX1BJTl9JKTsKKyNkZWZpbmUgU0VUX0dQSU9fREFUXzEJCQlvdXQzMihHUElPMF9PUiwgaW4zMihHUElPMF9PUikgfCBHUElPX0RBVF9QSU4pOworCisjZGVmaW5lCVNFVF9HUElPXzAoYml0KSBTRVRfR1BJT19SRUdfMChHUElPMF9PUiwgYml0KQorI2RlZmluZQlTRVRfR1BJT18xKGJpdCkgU0VUX0dQSU9fUkVHXzEoR1BJTzBfT1IsIGJpdCkKKworI2RlZmluZSBTRVRfR1BJT19DTEtfMF9aMQkJb3V0MzIoR1BJTzBfT1IsIChpbjMyKEdQSU8wX09SKSAmIEdQSU9fQ0xLX1BJTl9JKSB8IEdQSU9fREFUX1BJTik7CisjZGVmaW5lIFNFVF9HUElPX0NMS18wX1owCQlvdXQzMihHUElPMF9PUiwgaW4zMihHUElPMF9PUikgJiBHUElPX0NMS0RBVF9QSU5fSSk7CisKKyNkZWZpbmUgRlBHQV9XUklURV8xIHsgXAorCQkJU0VUX0dQSU9fQ0xLXzBfWjFcCisJCQlTRVRfR1BJT19DTEtfMX0KKworI2RlZmluZSBGUEdBX1dSSVRFXzAgeyBcCisJCQlTRVRfR1BJT19DTEtfMF9aMFwKKwkJCVNFVF9HUElPX0NMS18xfQorCisjZGVmaW5lIFBfR1AocmVnKSAocmVnICYgMHgwMDAyM2YwMCkKKworLyogUGxhdHRmb3JtaW5pdGlhbGl6YXRpb25zICovCisvKiBIZXJlIHdlIGhhdmUgdG8gc2V0IHRoZSBGUEdBIENoYWluICovCisvKiBQUk9HUkFNX1BST0dfRU4JPSBISUdIICovCisvKiBQUk9HUkFNX1NFTF9EUFIJPSBMT1cgKi8KK2ludCBmcGdhX3ByZV9mbiAoaW50IGNvb2tpZSkKK3sKKwl1bnNpZ25lZCBsb25nCXJlZzsKKworCXJlZyA9IGluMzIoR1BJTzBfSVIpOworCS8qIEVuYWJsZSB0aGUgRlBHQSBDaGFpbiAqLworCVNFVF9HUElPX1JFR18xKEdQSU8wX1RDUiwgQ0ZHX0dQSU9fUFJPR19FTik7CisJU0VUX0dQSU9fUkVHXzAoR1BJTzBfT0RSLCBDRkdfR1BJT19QUk9HX0VOKTsKKwlTRVRfR1BJT18xKENGR19HUElPX1BST0dfRU4pOworCVNFVF9HUElPX1JFR18xKEdQSU8wX1RDUiwgQ0ZHX0dQSU9fU0VMX0RQUik7CisJU0VUX0dQSU9fUkVHXzAoR1BJTzBfT0RSLCBDRkdfR1BJT19TRUxfRFBSKTsKKwlTRVRfR1BJT18wKChDRkdfR1BJT19TRUxfRFBSKSk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBHUElPIFBpbnMgKi8JCisJLyogb3V0cHV0ICovCisJU0VUX0dQSU9fMChDRkdfR1BJT19DTEspOworCVNFVF9HUElPX1JFR18xKEdQSU8wX1RDUiwgQ0ZHX0dQSU9fQ0xLKTsKKwlTRVRfR1BJT19SRUdfMChHUElPMF9PRFIsIENGR19HUElPX0NMSyk7CisKKwkvKiBvdXRwdXQgKi8KKwlTRVRfR1BJT18wKENGR19HUElPX0RBVEEpOworCVNFVF9HUElPX1JFR18xKEdQSU8wX1RDUiwgQ0ZHX0dQSU9fREFUQSk7CisJU0VUX0dQSU9fUkVHXzAoR1BJTzBfT0RSLCBDRkdfR1BJT19EQVRBKTsKKworCS8qIEZpcnN0IHdlIHNldCBTVEFUVVMgdG8gMCB0aGVuIGFzIGFuIGlucHV0ICovCisJU0VUX0dQSU9fUkVHXzEoR1BJTzBfVENSLCBDRkdfR1BJT19TVEFUVVMpOworCVNFVF9HUElPX1JFR18wKEdQSU8wX09EUiwgQ0ZHX0dQSU9fU1RBVFVTKTsKKwlTRVRfR1BJT18wKENGR19HUElPX1NUQVRVUyk7CisJU0VUX0dQSU9fUkVHXzAoR1BJTzBfVENSLCBDRkdfR1BJT19TVEFUVVMpOworCVNFVF9HUElPX1JFR18wKEdQSU8wX09EUiwgQ0ZHX0dQSU9fU1RBVFVTKTsKKworCS8qIG91dHB1dCAqLworCVNFVF9HUElPX1JFR18xKEdQSU8wX1RDUiwgQ0ZHX0dQSU9fQ09ORklHKTsKKwlTRVRfR1BJT19SRUdfMChHUElPMF9PRFIsIENGR19HUElPX0NPTkZJRyk7CisJU0VUX0dQSU9fMChDRkdfR1BJT19DT05GSUcpOworCisJLyogaW5wdXQgKi8KKwlTRVRfR1BJT18wKENGR19HUElPX0NPTl9ET04pOworCVNFVF9HUElPX1JFR18wKEdQSU8wX1RDUiwgQ0ZHX0dQSU9fQ09OX0RPTik7CisJU0VUX0dQSU9fUkVHXzAoR1BJTzBfT0RSLCBDRkdfR1BJT19DT05fRE9OKTsKKworCS8qIENPTkZJRyA9IDAgU1RBVFVTID0gMCAtPiBGUEdBIGluIHJlc2V0IHN0YXRlICovCisJU0VUX0dQSU9fMChDRkdfR1BJT19DT05GSUcpOworCXJldHVybiBGUEdBX1NVQ0NFU1M7Cit9CisKKy8qIFNldCB0aGUgc3RhdGUgb2YgQ09ORklHIFBpbiAqLworaW50IGZwZ2FfY29uZmlnX2ZuIChpbnQgYXNzZXJ0X2NvbmZpZywgaW50IGZsdXNoLCBpbnQgY29va2llKQoreworCWlmIChhc3NlcnRfY29uZmlnKSB7CisJCVNFVF9HUElPXzEoQ0ZHX0dQSU9fQ09ORklHKTsKKwl9IGVsc2UgeworCQlTRVRfR1BJT18wKENGR19HUElPX0NPTkZJRyk7CisJfQorCXJldHVybiBGUEdBX1NVQ0NFU1M7Cit9CisKKy8qIFJldHVybnMgdGhlIHN0YXRlIG9mIFNUQVRVUyBQaW4gKi8KK2ludCBmcGdhX3N0YXR1c19mbiAoaW50IGNvb2tpZSkKK3sKKwl1bnNpZ25lZCBsb25nCXJlZzsKKworCXJlZyA9IGluMzIoR1BJTzBfSVIpOworCWlmIChyZWcgJj0gKDB4ODAwMDAwMDAgPj4gQ0ZHX0dQSU9fU1RBVFVTKSkgeworCQlQUklOVEYoIlNUQVRVUyA9IEhJR0hcbiIpOworCQlyZXR1cm4gRlBHQV9GQUlMOworCX0KKwlQUklOVEYoIlNUQVRVUyA9IExPV1xuIik7CisJcmV0dXJuIEZQR0FfU1VDQ0VTUzsKK30KKworLyogUmV0dXJucyB0aGUgc3RhdGUgb2YgQ09ORl9ET05FIFBpbiAqLworaW50IGZwZ2FfZG9uZV9mbiAoaW50IGNvb2tpZSkKK3sKKwl1bnNpZ25lZCBsb25nCXJlZzsKKwlyZWcgPSBpbjMyKEdQSU8wX0lSKTsKKwlpZiAocmVnICY9ICgweDgwMDAwMDAwID4+IENGR19HUElPX0NPTl9ET04pKSB7CisJCVBSSU5URigiQ09ORl9ET04gPSBISUdIXG4iKTsKKwkJcmV0dXJuIEZQR0FfRkFJTDsKKwl9CisJUFJJTlRGKCJDT05GX0RPTiA9IExPV1xuIik7CisJcmV0dXJuIEZQR0FfU1VDQ0VTUzsKK30KKworLyogd3JpdGVzIHRoZSBjb21wbGV0ZSBidWZmZXIgdG8gdGhlIEZQR0EKKyAgIHdyaXRpbmcgdGhlIGNvbXBsZXRlIGJ1ZmZlciBpbiBvbmUgZnVuY3Rpb24gaXMgdmVyeSBmYXN0ZXIsCisgICB0aGVuIGNhbGxpbmcgaXQgZm9yIGV2ZXJ5IGJpdCAqLworaW50IGZwZ2Ffd3JpdGVfZm4gKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IGZsdXNoLCBpbnQgY29va2llKQoreworCXNpemVfdCBieXRlY291bnQgPSAwOworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSAodW5zaWduZWQgY2hhciAqKSBidWY7CisJdW5zaWduZWQgY2hhciB2YWw9MDsKKwlpbnQJCWk7CisKKwl3aGlsZSAoYnl0ZWNvdW50IDwgbGVuKSB7CisjaWZkZWYgQ0ZHX0ZQR0FfQ0hFQ0tfQ1RSTEMKKwkJaWYgKGN0cmxjICgpKSB7CisJCQlyZXR1cm4gRlBHQV9GQUlMOworCQl9CisjZW5kaWYKKwkJdmFsID0gZGF0YVtieXRlY291bnQgKysgXTsKKwkJaSA9IDg7CisJCWRvIHsKKwkJCWlmICh2YWwgJiAweDAxKSB7CisJCQkJRlBHQV9XUklURV8xOworCQkJfSBlbHNlIHsKKwkJCQlGUEdBX1dSSVRFXzA7CisJCQl9CisJCQl2YWwgPj49IDE7CisJCQlpIC0tOworCQl9IHdoaWxlIChpID4gMCk7CisKKyNpZmRlZiBDRkdfRlBHQV9QUk9HX0ZFRURCQUNLCisJCWlmIChieXRlY291bnQgJSAobGVuIC8gNDApID09IDApCisJCQlwdXRjICgnLicpOwkJLyogbGV0IHRoZW0ga25vdyB3ZSBhcmUgYWxpdmUgKi8KKyNlbmRpZgorCX0KKwlyZXR1cm4gRlBHQV9TVUNDRVNTOworfQorCisvKiBjYWxsZWQsIHdoZW4gcHJvZ3JhbW1pbmcgaXMgYWJvcnRlZCAqLworaW50IGZwZ2FfYWJvcnRfZm4gKGludCBjb29raWUpCit7CisJU0VUX0dQSU9fMSgoQ0ZHX0dQSU9fU0VMX0RQUikpOworCXJldHVybiBGUEdBX1NVQ0NFU1M7Cit9CisKKy8qIGNhbGxlZCwgd2hlbiBwcm9ncmFtbWluZyB3YXMgc3VjY2VzZnVsICovCitpbnQgZnBnYV9wb3N0X2ZuIChpbnQgY29va2llKQoreworCXJldHVybiBmcGdhX2Fib3J0X2ZuIChjb29raWUpOworfQorCisvKiBOb3RlIHRoYXQgdGhlc2UgYXJlIHBvaW50ZXJzIHRvIGNvZGUgdGhhdCBpcyBpbiBGbGFzaC4gIFRoZXkgd2lsbCBiZQorICogcmVsb2NhdGVkIGF0IHJ1bnRpbWUuCisgKi8KK0FsdGVyYV9DWUMyX1Bhc3NpdmVfU2VyaWFsX2ZucyBmcGdhX2ZucyA9IHsKKwlmcGdhX3ByZV9mbiwKKwlmcGdhX2NvbmZpZ19mbiwKKwlmcGdhX3N0YXR1c19mbiwKKwlmcGdhX2RvbmVfZm4sCisJZnBnYV93cml0ZV9mbiwKKwlmcGdhX2Fib3J0X2ZuLAorCWZwZ2FfcG9zdF9mbgorfTsKKworQWx0ZXJhX2Rlc2MgZnBnYVtDT05GSUdfRlBHQV9DT1VOVF0gPSB7CisJe0FsdGVyYV9DWUMyLAorCSBwYXNzaXZlX3NlcmlhbCwKKwkgQWx0ZXJhX0VQMkMzNV9TSVpFLAorCSAodm9pZCAqKSAmZnBnYV9mbnMsCisJIE5VTEwsCisJIDB9Cit9OworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgZnBnYS4gIFJldHVybiAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZS4KKyAqLworaW50IGFscHJfZnBnYV9pbml0ICh2b2lkKQoreworCWludCBpOworCisJUFJJTlRGICgiJXM6JWQ6IEluaXRpYWxpemUgRlBHQSBpbnRlcmZhY2UgKHJlbG9jYXRpb24gb2Zmc2V0ID0gMHglLjhseClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIGdkLT5yZWxvY19vZmYpOworCWZwZ2FfaW5pdCAoZ2QtPnJlbG9jX29mZik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ09ORklHX0ZQR0FfQ09VTlQ7IGkrKykgeworCQlQUklOVEYgKCIlczolZDogQWRkaW5nIGZwZ2EgJWRcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIGkpOworCQlmcGdhX2FkZCAoZnBnYV9hbHRlcmEsICZmcGdhW2ldKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYm9hcmQvcHJvZHJpdmUvYWxwci9pbml0LlMgYi9ib2FyZC9wcm9kcml2ZS9hbHByL2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmFhNjA5Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvcHJvZHJpdmUvYWxwci9pbml0LlMKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIFN0ZWZhbiBSb2VzZSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgc3JAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8cHBjX2FzbS50bXBsPgorI2luY2x1ZGUgPGNvbmZpZy5oPgorCisvKiBHZW5lcmFsICovCisjZGVmaW5lIFRMQl9WQUxJRCAgIDB4MDAwMDAyMDAKKworLyogU3VwcG9ydGVkIHBhZ2Ugc2l6ZXMgKi8KKyNkZWZpbmUgU1pfMUsJICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgU1pfNEsJICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgU1pfMTZLCSAgICAweDAwMDAwMDIwCisjZGVmaW5lIFNaXzY0SwkgICAgMHgwMDAwMDAzMAorI2RlZmluZSBTWl8yNTZLCSAgICAweDAwMDAwMDQwCisjZGVmaW5lIFNaXzFNCSAgICAweDAwMDAwMDUwCisjZGVmaW5lIFNaXzhNICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgU1pfMTZNCSAgICAweDAwMDAwMDcwCisjZGVmaW5lIFNaXzI1Nk0JICAgIDB4MDAwMDAwOTAKKworLyogU3RvcmFnZSBhdHRyaWJ1dGVzICovCisjZGVmaW5lIFNBX1cJICAgIDB4MDAwMDA4MDAJICAgIC8qIFdyaXRlLXRocm91Z2ggKi8KKyNkZWZpbmUgU0FfSQkgICAgMHgwMDAwMDQwMAkgICAgLyogQ2FjaGluZyBpbmhpYml0ZWQgKi8KKyNkZWZpbmUgU0FfTQkgICAgMHgwMDAwMDIwMAkgICAgLyogTWVtb3J5IGNvaGVyZW5jZSAqLworI2RlZmluZSBTQV9HCSAgICAweDAwMDAwMTAwCSAgICAvKiBHdWFyZGVkICovCisjZGVmaW5lIFNBX0UJICAgIDB4MDAwMDAwODAJICAgIC8qIEVuZGlhbiAqLworCisvKiBBY2Nlc3MgY29udHJvbCAqLworI2RlZmluZSBBQ19YCSAgICAweDAwMDAwMDI0CSAgICAvKiBFeGVjdXRlICovCisjZGVmaW5lIEFDX1cJICAgIDB4MDAwMDAwMTIJICAgIC8qIFdyaXRlICovCisjZGVmaW5lIEFDX1IJICAgIDB4MDAwMDAwMDkJICAgIC8qIFJlYWQgKi8KKworLyogU29tZSBoYW5keSBtYWNyb3MgKi8KKworI2RlZmluZSBFUE4oZSkJCSgoZSkgJiAweGZmZmZmYzAwKQorI2RlZmluZSBUTEIwKGVwbixzeikJKCAoRVBOKChlcG4pKSB8IChzeikgfCBUTEJfVkFMSUQgKSApCisjZGVmaW5lIFRMQjEocnBuLGVycG4pCSggKChycG4pJjB4ZmZmZmZjMDApIHwgKGVycG4pICkKKyNkZWZpbmUgVExCMihhKQkoIChhKSYweDAwMDAwZmJmICkKKworI2RlZmluZSB0bGJ0YWJfc3RhcnRcCisJbWZsciAgICByMSAgO1wKKwlibCAwZgkgICAgOworCisjZGVmaW5lIHRsYnRhYl9lbmRcCisJLmxvbmcgMCwgMCwgMAk7ICAgXAorMDoJbWZsciAgICByMAk7ICAgXAorCW10bHIgICAgcjEJOyAgIFwKKwlibHIJCTsKKworI2RlZmluZSB0bGJlbnRyeShlcG4sc3oscnBuLGVycG4sYXR0cilcCisJLmxvbmcgVExCMChlcG4sc3opLFRMQjEocnBuLGVycG4pLFRMQjIoYXR0cikKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRMQiBUQUJMRQorICoKKyAqIFRoaXMgdGFibGUgaXMgdXNlZCBieSB0aGUgY3B1IGJvb3QgY29kZSB0byBzZXR1cCB0aGUgaW5pdGlhbCB0bGIKKyAqIGVudHJpZXMuIFJhdGhlciB0aGFuIG1ha2UgYnJvYWQgYXNzdW1wdGlvbnMgaW4gdGhlIGNwdSBzb3VyY2UgdHJlZSwKKyAqIHRoaXMgdGFibGUgbGV0cyBlYWNoIGJvYXJkIHNldCB0aGluZ3MgdXAgaG93ZXZlciB0aGV5IGxpa2UuCisgKgorICogIFBvaW50ZXIgdG8gdGhlIHRhYmxlIGlzIHJldHVybmVkIGluIHIxCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkuc2VjdGlvbiAuYm9vdHBnLCJheCIKKwkuZ2xvYmwgdGxidGFiCisKK3RsYnRhYjoKKwl0bGJ0YWJfc3RhcnQKKwl0bGJlbnRyeSggMHhmZjAwMDAwMCwgU1pfMTZNLCAweGZmMDAwMDAwLCAxLCBBQ19SfEFDX1d8QUNfWHxTQV9HfFNBX0kgKQorCXRsYmVudHJ5KCBDRkdfUEVSSVBIRVJBTF9CQVNFLCBTWl8yNTZNLCAweDQwMDAwMDAwLCAxLCBBQ19SfEFDX1d8U0FfR3xTQV9JICkKKwl0bGJlbnRyeSggQ0ZHX0lTUkFNX0JBU0UsIFNaXzRLLCAweDgwMDAwMDAwLCAwLCBBQ19SfEFDX1d8QUNfWCApCisJdGxiZW50cnkoIENGR19JU1JBTV9CQVNFICsgMHgxMDAwLCBTWl80SywgMHg4MDAwMTAwMCwgMCwgQUNfUnxBQ19XfEFDX1ggKQorCXRsYmVudHJ5KCBDRkdfU0RSQU1fQkFTRSwgU1pfMjU2TSwgMHgwMDAwMDAwMCwgMCwgQUNfUnxBQ19XfEFDX1h8U0FfR3xTQV9JICkKKwl0bGJlbnRyeSggQ0ZHX1BDSV9CQVNFLCBTWl8yNTZNLCAweDAwMDAwMDAwLCAyLCBBQ19SfEFDX1d8U0FfR3xTQV9JICkKKworCS8qIFBDSSAqLworCXRsYmVudHJ5KCBDRkdfUENJX01FTUJBU0UsIFNaXzI1Nk0sIENGR19QQ0lfTUVNQkFTRSwgMywgQUNfUnxBQ19XfFNBX0d8U0FfSSApCisJdGxiZW50cnkoIENGR19QQ0lfTUVNQkFTRTEsIFNaXzI1Nk0sIENGR19QQ0lfTUVNQkFTRTEsIDMsIEFDX1J8QUNfV3xTQV9HfFNBX0kgKQorCXRsYmVudHJ5KCBDRkdfUENJX01FTUJBU0UyLCBTWl8yNTZNLCBDRkdfUENJX01FTUJBU0UyLCAzLCBBQ19SfEFDX1d8U0FfR3xTQV9JICkKKworCS8qIE5BTkQgKi8KKwl0bGJlbnRyeSggQ0ZHX05BTkRfQkFTRSwgU1pfNEssIENGR19OQU5EX0JBU0UsIDEsIEFDX1J8QUNfV3xBQ19YfFNBX0d8U0FfSSApCisJdGxidGFiX2VuZApkaWZmIC0tZ2l0IGEvYm9hcmQvcHJvZHJpdmUvYWxwci9uYW5kLmMgYi9ib2FyZC9wcm9kcml2ZS9hbHByL25hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGE4MDk4Ci0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvcHJvZHJpdmUvYWxwci9uYW5kLmMKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIEhlaWtvIFNjaG9jaGVyLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCBoc0BkZW54LmRlCisgKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBTdGVmYW4gUm9lc2UsIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHNyQGRlbnguZGUuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfTkFORCkKKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxuYW5kLmg+CisKK3N0cnVjdCBhbHByX25kZmNfcmVncyB7CisJdTE2IGNtZFs0XTsKKwl1MTYgYWRkcl93YWl0OworCXUxNiB0ZXJtOworCXUxNiBkdW1teTsKKwl1MTYgZHVtbXkyOworCXUxNiBkYXRhOworfTsKKworc3RhdGljIHU4IGh3Y3RsOworc3RhdGljIHN0cnVjdCBhbHByX25kZmNfcmVncyAqYWxwcl9uZGZjID0gTlVMTDsKKworI2RlZmluZSByZWFkYihhZGRyKQkodTgpKCoodm9sYXRpbGUgdTE2ICopKGFkZHIpKQorI2RlZmluZSB3cml0ZWIoZCxhZGRyKQkqKHZvbGF0aWxlIHUxNiAqKShhZGRyKSA9ICgodTE2KShkKSkKKworLyoKKyAqIFRoZSBBTFBSIGhhcyBhIE5BTkQgRmxhc2ggQ29udHJvbGxlciAoTkRGQykgdGhhdCBoYW5kbGVzIGFsbCBhY2Nlc3NlcyB0bworICogdGhlIE5BTkQgZGV2aWNlcy4gIFRoZSBOREZDIGhhcyBjb21tYW5kLCBhZGRyZXNzIGFuZCBkYXRhIHJlZ2lzdGVycyB0aGF0CisgKiB3aGVuIGFjY2Vzc2VkIHdpbGwgc2V0IHVwIHRoZSBOQU5EIGZsYXNoIHBpbnMgYXBwcm9wcmlhdGVseS4gIFdlJ2xsIHVzZSB0aGUKKyAqIGh3Y29udHJvbCBmdW5jdGlvbiB0byBzYXZlIHRoZSBjb25maWd1cmF0aW9uIGluIGEgZ2xvYmFsIHZhcmlhYmxlLgorICogV2UgY2FuIHRoZW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIHJlYWQgYW5kIHdyaXRlIGZ1bmN0aW9ucyB0bworICogZGV0ZXJtaW5lIHdoaWNoIE5ERkMgcmVnaXN0ZXIgdG8gYWNjZXNzLgorICoKKyAqIFRoZXJlIGFyZSAyIE5BTkQgZGV2aWNlcyBvbiB0aGUgYm9hcmQsIGEgSHluaXggSFkyN1VTMDg1NjFBICgxIEdCeXRlKS4KKyAqLworc3RhdGljIHZvaWQgYWxwcl9uYW5kX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgTkFORF9DVExfU0VUQ0xFOgorCQlod2N0bCB8PSAweDE7CisJCWJyZWFrOworCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgorCQlod2N0bCAmPSB+MHgxOworCQlicmVhazsKKwljYXNlIE5BTkRfQ1RMX1NFVEFMRToKKwkJaHdjdGwgfD0gMHgyOworCQlicmVhazsKKwljYXNlIE5BTkRfQ1RMX0NMUkFMRToKKwkJaHdjdGwgJj0gfjB4MjsKKwkJYnJlYWs7CisJY2FzZSBOQU5EX0NUTF9TRVROQ0U6CisJCWJyZWFrOworCWNhc2UgTkFORF9DVExfQ0xSTkNFOgorCQl3cml0ZWIoMHgwMCwgJihhbHByX25kZmMtPnRlcm0pKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBhbHByX25hbmRfd3JpdGVfYnl0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyIGJ5dGUpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZCA9IG10ZC0+cHJpdjsKKworCWlmIChod2N0bCAmIDB4MSkKKwkJLyoKKwkJICogSU9fQUREUl9XIHVzZWQgYXMgQ01EW2ldIHJlZyB0byBzdXBwb3J0IG11bHRpcGxlIE5BTkQKKwkJICogY2hpcHMuCisJCSAqLworCQl3cml0ZWIoYnl0ZSwgbmFuZC0+SU9fQUREUl9XKTsKKwllbHNlIGlmIChod2N0bCAmIDB4MikgeworCQl3cml0ZWIoYnl0ZSwgJihhbHByX25kZmMtPmFkZHJfd2FpdCkpOworCX0gZWxzZQorCQl3cml0ZWIoYnl0ZSwgJihhbHByX25kZmMtPmRhdGEpKTsKK30KKworc3RhdGljIHVfY2hhciBhbHByX25hbmRfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXJldHVybiByZWFkYigmKGFscHJfbmRmYy0+ZGF0YSkpOworfQorCitzdGF0aWMgdm9pZCBhbHByX25hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kID0gbXRkLT5wcml2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChod2N0bCAmIDB4MSkKKwkJCSAvKgorCQkJICAqIElPX0FERFJfVyB1c2VkIGFzIENNRFtpXSByZWcgdG8gc3VwcG9ydCBtdWx0aXBsZSBOQU5ECisJCQkgICogY2hpcHMuCisJCQkgICovCisJCQl3cml0ZWIoYnVmW2ldLCBuYW5kLT5JT19BRERSX1cpOworCQllbHNlIGlmIChod2N0bCAmIDB4MikKKwkJCXdyaXRlYihidWZbaV0sICYoYWxwcl9uZGZjLT5hZGRyX3dhaXQpKTsKKwkJZWxzZQorCQkJd3JpdGViKGJ1ZltpXSwgJihhbHByX25kZmMtPmRhdGEpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFscHJfbmFuZF9yZWFkX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJYnVmW2ldID0gcmVhZGIoJihhbHByX25kZmMtPmRhdGEpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWxwcl9uYW5kX3ZlcmlmeV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAoYnVmW2ldICE9IHJlYWRiKCYoYWxwcl9uZGZjLT5kYXRhKSkpCisJCQlyZXR1cm4gaTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFscHJfbmFuZF9kZXZfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJdm9sYXRpbGUgdV9jaGFyIHZhbDsKKworCS8qCisJICogQmxvY2tpbmcgcmVhZCB0byB3YWl0IGZvciBOQU5EIHRvIGJlIHJlYWR5CisJICovCisJdmFsID0gcmVhZGIoJihhbHByX25kZmMtPmFkZHJfd2FpdCkpOworCisJLyoKKwkgKiBSZXR1cm4gYWx3YXlzIHRydWUKKwkgKi8KKwlyZXR1cm4gMTsKK30KKwordm9pZCBib2FyZF9uYW5kX2luaXQoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCkKK3sKKwlhbHByX25kZmMgPSAoc3RydWN0IGFscHJfbmRmY19yZWdzICopQ0ZHX05BTkRfQkFTRTsKKworCW5hbmQtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOworCisJLyogUmVmZXJlbmNlIGhhcmR3YXJlIGNvbnRyb2wgZnVuY3Rpb24gKi8KKwluYW5kLT5od2NvbnRyb2wgID0gYWxwcl9uYW5kX2h3Y29udHJvbDsKKwkvKiBTZXQgY29tbWFuZCBkZWxheSB0aW1lICovCisJbmFuZC0+d3JpdGVfYnl0ZSA9IGFscHJfbmFuZF93cml0ZV9ieXRlOworCW5hbmQtPnJlYWRfYnl0ZSAgPSBhbHByX25hbmRfcmVhZF9ieXRlOworCW5hbmQtPndyaXRlX2J1ZiAgPSBhbHByX25hbmRfd3JpdGVfYnVmOworCW5hbmQtPnJlYWRfYnVmICAgPSBhbHByX25hbmRfcmVhZF9idWY7CisJbmFuZC0+dmVyaWZ5X2J1ZiA9IGFscHJfbmFuZF92ZXJpZnlfYnVmOworCW5hbmQtPmRldl9yZWFkeSAgPSBhbHByX25hbmRfZGV2X3JlYWR5OworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9ib2FyZC9wcm9kcml2ZS9hbHByL3UtYm9vdC5sZHMgYi9ib2FyZC9wcm9kcml2ZS9hbHByL3UtYm9vdC5sZHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwNDA4OQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL3Byb2RyaXZlL2FscHIvdS1ib290LmxkcwpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNAorICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCitPVVRQVVRfQVJDSChwb3dlcnBjKQorU0VBUkNIX0RJUigvbGliKTsgU0VBUkNIX0RJUigvdXNyL2xpYik7IFNFQVJDSF9ESVIoL3Vzci9sb2NhbC9saWIpOyBTRUFSQ0hfRElSKC91c3IvbG9jYWwvcG93ZXJwYy1hbnktZWxmL2xpYik7CisvKiBEbyB3ZSBuZWVkIGFueSBvZiB0aGVzZSBmb3IgZWxmPworICAgX19EWU5BTUlDID0gMDsgICAgKi8KK1NFQ1RJT05TCit7CisgIC5yZXNldHZlYyAweEZGRkZGRkZDIDoKKyAgeworICAgICooLnJlc2V0dmVjKQorICB9ID0gMHhmZmZmCisKKyAgLmJvb3RwZyAweEZGRkZGMDAwIDoKKyAgeworICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLmJvb3RwZykKKyAgfSA9IDB4ZmZmZgorCisgIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50OiAqLworICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKKyAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9CisgIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQorICAuZHluc3ltICAgICAgICA6IHsgKiguZHluc3ltKQkJfQorICAuZHluc3RyICAgICAgICA6IHsgKiguZHluc3RyKQkJfQorICAucmVsLnRleHQgICAgICA6IHsgKigucmVsLnRleHQpCQl9CisgIC5yZWxhLnRleHQgICAgIDogeyAqKC5yZWxhLnRleHQpIAl9CisgIC5yZWwuZGF0YSAgICAgIDogeyAqKC5yZWwuZGF0YSkJCX0KKyAgLnJlbGEuZGF0YSAgICAgOiB7ICooLnJlbGEuZGF0YSkgCX0KKyAgLnJlbC5yb2RhdGEgICAgOiB7ICooLnJlbC5yb2RhdGEpIAl9CisgIC5yZWxhLnJvZGF0YSAgIDogeyAqKC5yZWxhLnJvZGF0YSkgCX0KKyAgLnJlbC5nb3QgICAgICAgOiB7ICooLnJlbC5nb3QpCQl9CisgIC5yZWxhLmdvdCAgICAgIDogeyAqKC5yZWxhLmdvdCkJCX0KKyAgLnJlbC5jdG9ycyAgICAgOiB7ICooLnJlbC5jdG9ycykJfQorICAucmVsYS5jdG9ycyAgICA6IHsgKigucmVsYS5jdG9ycykJfQorICAucmVsLmR0b3JzICAgICA6IHsgKigucmVsLmR0b3JzKQl9CisgIC5yZWxhLmR0b3JzICAgIDogeyAqKC5yZWxhLmR0b3JzKQl9CisgIC5yZWwuYnNzICAgICAgIDogeyAqKC5yZWwuYnNzKQkJfQorICAucmVsYS5ic3MgICAgICA6IHsgKigucmVsYS5ic3MpCQl9CisgIC5yZWwucGx0ICAgICAgIDogeyAqKC5yZWwucGx0KQkJfQorICAucmVsYS5wbHQgICAgICA6IHsgKigucmVsYS5wbHQpCQl9CisgIC5pbml0ICAgICAgICAgIDogeyAqKC5pbml0KQl9CisgIC5wbHQgOiB7ICooLnBsdCkgfQorICAudGV4dCAgICAgIDoKKyAgeworICAgIC8qIFdBUk5JTkcgLSB0aGUgZm9sbG93aW5nIGlzIGhhbmQtb3B0aW1pemVkIHRvIGZpdCB3aXRoaW4JKi8KKyAgICAvKiB0aGUgc2VjdG9yIGxheW91dCBvZiBvdXIgZmxhc2ggY2hpcHMhCVhYWCBGSVhNRSBYWFgJKi8KKworICAgIGNwdS9wcGM0eHgvc3RhcnQubwkoLnRleHQpCisgICAgYm9hcmQvcHJvZHJpdmUvYWxwci9pbml0Lm8JKC50ZXh0KQorICAgIGNwdS9wcGM0eHgva2dkYi5vCSgudGV4dCkKKyAgICBjcHUvcHBjNHh4L3RyYXBzLm8JKC50ZXh0KQorICAgIGNwdS9wcGM0eHgvaW50ZXJydXB0cy5vCSgudGV4dCkKKyAgICBjcHUvcHBjNHh4L3NlcmlhbC5vCSgudGV4dCkKKyAgICBjcHUvcHBjNHh4L2NwdV9pbml0Lm8JKC50ZXh0KQorICAgIGNwdS9wcGM0eHgvc3BlZWQubwkoLnRleHQpCisgICAgY29tbW9uL2RsbWFsbG9jLm8JKC50ZXh0KQorICAgIGxpYl9nZW5lcmljL2NyYzMyLm8JCSgudGV4dCkKKyAgICBsaWJfcHBjL2V4dGFibGUubwkoLnRleHQpCisgICAgbGliX2dlbmVyaWMvemxpYi5vCQkoLnRleHQpCisKKy8qICAgIC4gPSBlbnZfb2Zmc2V0OyovCisvKiAgICBjb21tb24vZW52aXJvbm1lbnQubygudGV4dCkqLworCisgICAgKigudGV4dCkKKyAgICAqKC5maXh1cCkKKyAgICAqKC5nb3QxKQorICB9CisgIF9ldGV4dCA9IC47CisgIFBST1ZJREUgKGV0ZXh0ID0gLik7CisgIC5yb2RhdGEgICAgOgorICB7CisgICAgKigucm9kYXRhKQorICAgICooLnJvZGF0YTEpCisgICAgKigucm9kYXRhLnN0cjEuNCkKKyAgICAqKC5laF9mcmFtZSkKKyAgfQorICAuZmluaSAgICAgIDogeyAqKC5maW5pKSAgICB9ID0wCisgIC5jdG9ycyAgICAgOiB7ICooLmN0b3JzKSAgIH0KKyAgLmR0b3JzICAgICA6IHsgKiguZHRvcnMpICAgfQorCisgIC8qIFJlYWQtd3JpdGUgc2VjdGlvbiwgbWVyZ2VkIGludG8gZGF0YSBzZWdtZW50OiAqLworICAuID0gKC4gKyAweDAwRkYpICYgMHhGRkZGRkYwMDsKKyAgX2Vyb3RleHQgPSAuOworICBQUk9WSURFIChlcm90ZXh0ID0gLik7CisgIC5yZWxvYyAgIDoKKyAgeworICAgICooLmdvdCkKKyAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICooLmdvdDIpCisgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgKiguZml4dXApCisgIH0KKyAgX19nb3QyX2VudHJpZXMgPSAoX0ZJWFVQX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4yOworICBfX2ZpeHVwX2VudHJpZXMgPSAoLiAtIF9GSVhVUF9UQUJMRV8pPj4yOworCisgIC5kYXRhICAgIDoKKyAgeworICAgICooLmRhdGEpCisgICAgKiguZGF0YTEpCisgICAgKiguc2RhdGEpCisgICAgKiguc2RhdGEyKQorICAgICooLmR5bmFtaWMpCisgICAgQ09OU1RSVUNUT1JTCisgIH0KKyAgX2VkYXRhICA9ICAuOworICBQUk9WSURFIChlZGF0YSA9IC4pOworCisgIC4gPSAuOworICBfX3VfYm9vdF9jbWRfc3RhcnQgPSAuOworICAudV9ib290X2NtZCA6IHsgKigudV9ib290X2NtZCkgfQorICBfX3VfYm9vdF9jbWRfZW5kID0gLjsKKworCisgIC4gPSAuOworICBfX3N0YXJ0X19fZXhfdGFibGUgPSAuOworICBfX2V4X3RhYmxlIDogeyAqKF9fZXhfdGFibGUpIH0KKyAgX19zdG9wX19fZXhfdGFibGUgPSAuOworCisgIC4gPSBBTElHTigyNTYpOworICBfX2luaXRfYmVnaW4gPSAuOworICAudGV4dC5pbml0IDogeyAqKC50ZXh0LmluaXQpIH0KKyAgLmRhdGEuaW5pdCA6IHsgKiguZGF0YS5pbml0KSB9CisgIC4gPSBBTElHTigyNTYpOworICBfX2luaXRfZW5kID0gLjsKKworICBfX2Jzc19zdGFydCA9IC47CisgIC5ic3MgICAgICAgOgorICB7CisgICAqKC5zYnNzKSAqKC5zY29tbW9uKQorICAgKiguZHluYnNzKQorICAgKiguYnNzKQorICAgKihDT01NT04pCisgIH0KKyAgX2VuZCA9IC4gOworICBQUk9WSURFIChlbmQgPSAuKTsKK30KZGlmZiAtLWdpdCBhL2JvYXJkL3Byb2RyaXZlL2NvbW1vbi9mbGFzaC5jIGIvYm9hcmQvcHJvZHJpdmUvY29tbW9uL2ZsYXNoLmMKaW5kZXggODYzMGNjMS4uMzYzNjMxZiAxMDA2NDQKLS0tIGEvYm9hcmQvcHJvZHJpdmUvY29tbW9uL2ZsYXNoLmMKKysrIGIvYm9hcmQvcHJvZHJpdmUvY29tbW9uL2ZsYXNoLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKIAljYXNlIEZMQVNIX01BTl9BTUQ6CXByaW50ZiAoIkFNRCAiKTsJCWJyZWFrOwogCWNhc2UgRkxBU0hfTUFOX0ZVSjoJcHJpbnRmICgiRlVKSVRTVSAiKTsJCWJyZWFrOwogCWNhc2UgRkxBU0hfTUFOX1NTVDoJcHJpbnRmICgiU1NUICIpOwkJYnJlYWs7CisJY2FzZSBGTEFTSF9NQU5fU1RNOglwcmludGYgKCJTVCAiKTsJCQlicmVhazsKIAljYXNlIEZMQVNIX01BTl9FWENFTDoJcHJpbnRmICgiRXhjZWwgU2VtaWNvbmR1Y3RvciAiKTsgYnJlYWs7CiAJZGVmYXVsdDoJCXByaW50ZiAoIlVua25vd24gVmVuZG9yICIpOwlicmVhazsKIAl9CkBAIC0xNTYsNiArMTU3LDkgQEAKIAljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKVNTVF9NQU5VRkFDVDoKIAkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fU1NUOwogCQlicmVhazsKKwljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKVNUTV9NQU5VRkFDVDoKKwkJaW5mby0+Zmxhc2hfaWQgPSBGTEFTSF9NQU5fU1RNOworCQlicmVhazsKIAljYXNlIChDRkdfRkxBU0hfV09SRF9TSVpFKUVYQ0VMX01BTlVGQUNUOgogCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9FWENFTDsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9jb21tb24vTWFrZWZpbGUgYi9jb21tb24vTWFrZWZpbGUKaW5kZXggMDdkZGM5NS4uMDEwNjA4OCAxMDA2NDQKLS0tIGEvY29tbW9uL01ha2VmaWxlCisrKyBiL2NvbW1vbi9NYWtlZmlsZQpAQCAtNDEsNyArNDEsNyBAQAogCSAgY21kX3BjaS5vIGNtZF9wY21jaWEubyBjbWRfcG9ydGlvLm8gXAogCSAgY21kX3JlZ2luZm8ubyBjbWRfcmVpc2VyLm8gY21kX3Njc2kubyBjbWRfc3BpLm8gY21kX3VuaXZlcnNlLm8gXAogCSAgY21kX3VzYi5vIGNtZF92ZmQubyBcCi0JICBjb21tYW5kLm8gY29uc29sZS5vIGRldmljZXMubyBkbG1hbGxvYy5vIGRvY2VjYy5vIFwKKwkgIGNvbW1hbmQubyBjb25zb2xlLm8gY3ljbG9uMi5vIGRldmljZXMubyBkbG1hbGxvYy5vIGRvY2VjYy5vIFwKIAkgIGVudmlyb25tZW50Lm8gZW52X2NvbW1vbi5vIFwKIAkgIGVudl9uYW5kLm8gZW52X2RhdGFmbGFzaC5vIGVudl9mbGFzaC5vIGVudl9lZXByb20ubyBcCiAJICBlbnZfbnZyYW0ubyBlbnZfbm93aGVyZS5vIFwKZGlmZiAtLWdpdCBhL2NvbW1vbi9hbHRlcmEuYyBiL2NvbW1vbi9hbHRlcmEuYwppbmRleCBlYmQ1MDM4Li4wNmU4YTk1IDEwMDY0NAotLS0gYS9jb21tb24vYWx0ZXJhLmMKKysrIGIvY29tbW9uL2FsdGVyYS5jCkBAIC01MCwxNSArNTAsMjAgQEAKIHsKIAlpbnQgcmV0X3ZhbCA9IEZQR0FfRkFJTDsJLyogYXNzdW1lIGEgZmFpbHVyZSAqLwogCi0JaWYgKCFhbHRlcmFfdmFsaWRhdGUgKGRlc2MsIF9fRlVOQ1RJT05fXykpIHsKKwlpZiAoIWFsdGVyYV92YWxpZGF0ZSAoZGVzYywgKGNoYXIgKilfX0ZVTkNUSU9OX18pKSB7CiAJCXByaW50ZiAoIiVzOiBJbnZhbGlkIGRldmljZSBkZXNjcmlwdG9yXG4iLCBfX0ZVTkNUSU9OX18pOwogCX0gZWxzZSB7CiAJCXN3aXRjaCAoZGVzYy0+ZmFtaWx5KSB7CiAJCWNhc2UgQWx0ZXJhX0FDRVgxSzoKKwkJY2FzZSBBbHRlcmFfQ1lDMjoKICNpZiAoQ09ORklHX0ZQR0EgJiBDRkdfQUNFWDFLKQogCQkJUFJJTlRGICgiJXM6IExhdW5jaGluZyB0aGUgQUNFWDFLIExvYWRlci4uLlxuIiwKIAkJCQkJX19GVU5DVElPTl9fKTsKIAkJCXJldF92YWwgPSBBQ0VYMUtfbG9hZCAoZGVzYywgYnVmLCBic2l6ZSk7CisjZWxpZiAoQ09ORklHX0ZQR0EgJiBDRkdfQ1lDTE9OMikKKwkJCVBSSU5URiAoIiVzOiBMYXVuY2hpbmcgdGhlIENZQ0xPTiBJSSBMb2FkZXIuLi5cbiIsCisJCQkJCV9fRlVOQ1RJT05fXyk7CisJCQlyZXRfdmFsID0gQ1lDMl9sb2FkIChkZXNjLCBidWYsIGJzaXplKTsKICNlbHNlCiAJCQlwcmludGYgKCIlczogTm8gc3VwcG9ydCBmb3IgQUNFWDFLIGRldmljZXMuXG4iLAogCQkJCQlfX0ZVTkNUSU9OX18pOwpAQCAtNzgsNyArODMsNyBAQAogewogCWludCByZXRfdmFsID0gRlBHQV9GQUlMOwkvKiBhc3N1bWUgYSBmYWlsdXJlICovCiAKLQlpZiAoIWFsdGVyYV92YWxpZGF0ZSAoZGVzYywgX19GVU5DVElPTl9fKSkgeworCWlmICghYWx0ZXJhX3ZhbGlkYXRlIChkZXNjLCAoY2hhciAqKV9fRlVOQ1RJT05fXykpIHsKIAkJcHJpbnRmICgiJXM6IEludmFsaWQgZGV2aWNlIGRlc2NyaXB0b3JcbiIsIF9fRlVOQ1RJT05fXyk7CiAJfSBlbHNlIHsKIAkJc3dpdGNoIChkZXNjLT5mYW1pbHkpIHsKQEAgLTEwNiwxMyArMTExLDE2IEBACiB7CiAJaW50IHJldF92YWwgPSBGUEdBX0ZBSUw7CiAKLQlpZiAoYWx0ZXJhX3ZhbGlkYXRlIChkZXNjLCBfX0ZVTkNUSU9OX18pKSB7CisJaWYgKGFsdGVyYV92YWxpZGF0ZSAoZGVzYywgKGNoYXIgKilfX0ZVTkNUSU9OX18pKSB7CiAJCXByaW50ZiAoIkZhbWlseTogICAgICAgIFx0Iik7CiAJCXN3aXRjaCAoZGVzYy0+ZmFtaWx5KSB7CiAJCWNhc2UgQWx0ZXJhX0FDRVgxSzoKIAkJCXByaW50ZiAoIkFDRVgxS1xuIik7CiAJCQlicmVhazsKIAkJCS8qIEFkZCBuZXcgZmFtaWx5IHR5cGVzIGhlcmUgKi8KKwkJY2FzZSBBbHRlcmFfQ1lDMjoKKwkJCXByaW50ZiAoIkNZQ0xPTiBJSVxuIik7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByaW50ZiAoIlVua25vd24gZmFtaWx5IHR5cGUsICVkXG4iLCBkZXNjLT5mYW1pbHkpOwogCQl9CkBAIC0xNDcsOCArMTU1LDExIEBACiAJCQlwcmludGYgKCJEZXZpY2UgRnVuY3Rpb24gVGFibGUgQCAweCVwXG4iLCBkZXNjLT5pZmFjZV9mbnMpOwogCQkJc3dpdGNoIChkZXNjLT5mYW1pbHkpIHsKIAkJCWNhc2UgQWx0ZXJhX0FDRVgxSzoKKwkJCWNhc2UgQWx0ZXJhX0NZQzI6CiAjaWYgKENPTkZJR19GUEdBICYgQ0ZHX0FDRVgxSykKIAkJCQlBQ0VYMUtfaW5mbyAoZGVzYyk7CisjZWxpZiAoQ09ORklHX0ZQR0EgJiBDRkdfQ1lDTE9OMikKKwkJCQlDWUMyX2luZm8gKGRlc2MpOwogI2Vsc2UKIAkJCQkvKiBqdXN0IGluIGNhc2UgKi8KIAkJCQlwcmludGYgKCIlczogTm8gc3VwcG9ydCBmb3IgQUNFWDFLIGRldmljZXMuXG4iLApAQCAtMTc2LDcgKzE4Nyw3IEBACiB7CiAJaW50IHJldF92YWwgPSBGUEdBX0ZBSUw7CS8qIGFzc3VtZSBhIGZhaWx1cmUgKi8KIAotCWlmICghYWx0ZXJhX3ZhbGlkYXRlIChkZXNjLCBfX0ZVTkNUSU9OX18pKSB7CisJaWYgKCFhbHRlcmFfdmFsaWRhdGUgKGRlc2MsIChjaGFyICopX19GVU5DVElPTl9fKSkgewogCQlwcmludGYgKCIlczogSW52YWxpZCBkZXZpY2UgZGVzY3JpcHRvclxuIiwgX19GVU5DVElPTl9fKTsKIAl9IGVsc2UgewogCQlzd2l0Y2ggKGRlc2MtPmZhbWlseSkgewpAQCAtMTg4LDYgKzE5OSwxNCBAQAogCQkJCQlfX0ZVTkNUSU9OX18pOwogI2VuZGlmCiAJCQlicmVhazsKKwkJY2FzZSBBbHRlcmFfQ1lDMjoKKyNpZiAoQ09ORklHX0ZQR0EgJiBDRkdfQ1lDTE9OMikKKwkJCXJldF92YWwgPSBDWUMyX3JlbG9jIChkZXNjLCByZWxvY19vZmZzZXQpOworI2Vsc2UKKwkJCXByaW50ZiAoIiVzOiBObyBzdXBwb3J0IGZvciBDWUNMT04gSUkgZGV2aWNlcy5cbiIsCisJCQkJCV9fRlVOQ1RJT05fXyk7CisjZW5kaWYKKwkJCWJyZWFrOwogCQkJLyogQWRkIG5ldyBmYW1pbHkgdHlwZXMgaGVyZSAqLwogCQlkZWZhdWx0OgogCQkJcHJpbnRmICgiJXM6IFVuc3VwcG9ydGVkIGZhbWlseSB0eXBlLCAlZFxuIiwKZGlmZiAtLWdpdCBhL2NvbW1vbi9jbWRfZnBnYS5jIGIvY29tbW9uL2NtZF9mcGdhLmMKaW5kZXggOWEwMWU3ZC4uMzQ0NDA5MSAxMDA2NDQKLS0tIGEvY29tbW9uL2NtZF9mcGdhLmMKKysrIGIvY29tbW9uL2NtZF9mcGdhLmMKQEAgLTU1LDYgKzU1LDcgQEAKICNkZWZpbmUgRlBHQV9MT0FEICAgMQogI2RlZmluZSBGUEdBX0xPQURCICAyCiAjZGVmaW5lIEZQR0FfRFVNUCAgIDMKKyNkZWZpbmUgRlBHQV9MT0FETUsgNAogCiAvKiBDb252ZXJ0IGJpdHN0cmVhbSBkYXRhIGFuZCBsb2FkIGludG8gdGhlIGZwZ2EgKi8KIGludCBmcGdhX2xvYWRiaXRzdHJlYW0odW5zaWduZWQgbG9uZyBkZXYsIGNoYXIqIGZwZ2FkYXRhLCBzaXplX3Qgc2l6ZSkKQEAgLTI1MSw2ICsyNTIsMjMgQEAKIAkJcmMgPSBmcGdhX2xvYWRiaXRzdHJlYW0oZGV2LCBmcGdhX2RhdGEsIGRhdGFfc2l6ZSk7CiAJCWJyZWFrOwogCisJY2FzZSBGUEdBX0xPQURNSzoKKwkJeworCQkJaW1hZ2VfaGVhZGVyX3QgaGVhZGVyOworCQkJaW1hZ2VfaGVhZGVyX3QgKmhkciA9ICZoZWFkZXI7CisJCQl1bG9uZwlkYXRhOworCisJCQltZW1tb3ZlICgmaGVhZGVyLCAoY2hhciAqKWZwZ2FfZGF0YSwgc2l6ZW9mKGltYWdlX2hlYWRlcl90KSk7CisJCQlpZiAobnRvaGwoaGRyLT5paF9tYWdpYykgIT0gSUhfTUFHSUMpIHsKKwkJCQlwdXRzICgiQmFkIE1hZ2ljIE51bWJlclxuIik7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlkYXRhID0gKCh1bG9uZylmcGdhX2RhdGEgKyBzaXplb2YoaW1hZ2VfaGVhZGVyX3QpKTsKKwkJCWRhdGFfc2l6ZSAgPSBudG9obChoZHItPmloX3NpemUpOworCQkJcmMgPSBmcGdhX2xvYWQgKGRldiwgKHZvaWQgKilkYXRhLCBkYXRhX3NpemUpOworCQl9CisJCWJyZWFrOworCiAJY2FzZSBGUEdBX0RVTVA6CiAJCXJjID0gZnBnYV9kdW1wIChkZXYsIGZwZ2FfZGF0YSwgZGF0YV9zaXplKTsKIAkJYnJlYWs7CkBAIC0yODIsNiArMzAwLDggQEAKIAkJb3AgPSBGUEdBX0xPQURCOwogCX0gZWxzZSBpZiAoIXN0cmNtcCAoImxvYWQiLCBvcHN0cikpIHsKIAkJb3AgPSBGUEdBX0xPQUQ7CisJfSBlbHNlIGlmICghc3RyY21wICgibG9hZG1rIiwgb3BzdHIpKSB7CisJCW9wID0gRlBHQV9MT0FETUs7CiAJfSBlbHNlIGlmICghc3RyY21wICgiZHVtcCIsIG9wc3RyKSkgewogCQlvcCA9IEZQR0FfRFVNUDsKIAl9CkBAIC0yOTksNSArMzE5LDYgQEAKIAkgICAgIlx0aW5mb1x0bGlzdCBrbm93biBkZXZpY2UgaW5mb3JtYXRpb25cbiIKIAkgICAgIlx0bG9hZFx0TG9hZCBkZXZpY2UgZnJvbSBtZW1vcnkgYnVmZmVyXG4iCiAJICAgICJcdGxvYWRiXHRMb2FkIGRldmljZSBmcm9tIGJpdHN0cmVhbSBidWZmZXIgKFhpbGlueCBkZXZpY2VzIG9ubHkpXG4iCisJICAgICJcdGxvYWRta1x0TG9hZCBkZXZpY2UgZ2VuZXJhdGVkIHdpdGggbWtpbWFnZVxuIgogCSAgICAiXHRkdW1wXHRMb2FkIGRldmljZSB0byBtZW1vcnkgYnVmZmVyXG4iKTsKICNlbmRpZiAvKiBDT05GSUdfRlBHQSAmJiBDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX0ZQR0EgKi8KZGlmZiAtLWdpdCBhL2NvbW1vbi9jeWNsb24yLmMgYi9jb21tb24vY3ljbG9uMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZTEzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vY3ljbG9uMi5jCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDA2CisgKiBIZWlrbyBTY2hvY2hlciwgaHNAZGVueC5kZQorICogQmFzZWQgb24gQUNFMVhLLmMKKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgkJLyogY29yZSBVLUJvb3QgZGVmaW5pdGlvbnMgKi8KKyNpbmNsdWRlIDxhbHRlcmEuaD4KKyNpbmNsdWRlIDxBQ0VYMUsuaD4JCS8qIEFDRVggZGV2aWNlIGZhbWlseSAqLworCisjaWYgKENPTkZJR19GUEdBICYgKENGR19BTFRFUkEgfCBDRkdfQ1lDTE9OMikpCisKKy8qIERlZmluZSBGUEdBX0RFQlVHIHRvIGdldCBkZWJ1ZyBwcmludGYncyAqLworI2lmZGVmCUZQR0FfREVCVUcKKyNkZWZpbmUgUFJJTlRGKGZtdCxhcmdzLi4uKQlwcmludGYgKGZtdCAsIyNhcmdzKQorI2Vsc2UKKyNkZWZpbmUgUFJJTlRGKGZtdCxhcmdzLi4uKQorI2VuZGlmCisKKy8qIE5vdGU6IFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgd2UgY2Fubm90IHBvc3NpYmx5IHJ1biBmYXN0IGVub3VnaCB0bworICogb3ZlcnJ1biB0aGUgZGV2aWNlICh0aGUgU2xhdmUgUGFyYWxsZWwgbW9kZSBjYW4gZnJlZSBydW4gYXQgNTBNSHopLgorICogSWYgdGhlcmUgaXMgYSBuZWVkIHRvIG9wZXJhdGUgc2xvd2VyLCBkZWZpbmUgQ09ORklHX0ZQR0FfREVMQVkgaW4KKyAqIHRoZSBib2FyZCBjb25maWcgZmlsZSB0byBzbG93IHRoaW5ncyBkb3duLgorICovCisjaWZuZGVmIENPTkZJR19GUEdBX0RFTEFZCisjZGVmaW5lIENPTkZJR19GUEdBX0RFTEFZKCkKKyNlbmRpZgorCisjaWZuZGVmIENGR19GUEdBX1dBSVQKKyNkZWZpbmUgQ0ZHX0ZQR0FfV0FJVCBDRkdfSFovMTAJCS8qIDEwMCBtcyAqLworI2VuZGlmCisKK3N0YXRpYyBpbnQgQ1lDMl9wc19sb2FkKCBBbHRlcmFfZGVzYyAqZGVzYywgdm9pZCAqYnVmLCBzaXplX3QgYnNpemUgKTsKK3N0YXRpYyBpbnQgQ1lDMl9wc19kdW1wKCBBbHRlcmFfZGVzYyAqZGVzYywgdm9pZCAqYnVmLCBzaXplX3QgYnNpemUgKTsKKy8qIHN0YXRpYyBpbnQgQ1lDMl9wc19pbmZvKCBBbHRlcmFfZGVzYyAqZGVzYyApOyAqLworc3RhdGljIGludCBDWUMyX3BzX3JlbG9jKCBBbHRlcmFfZGVzYyAqZGVzYywgdWxvbmcgcmVsb2Nfb2Zmc2V0ICk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIENZQ0xPTjIgR2VuZXJpYyBJbXBsZW1lbnRhdGlvbiAqLworaW50IENZQzJfbG9hZCAoQWx0ZXJhX2Rlc2MgKiBkZXNjLCB2b2lkICpidWYsIHNpemVfdCBic2l6ZSkKK3sKKwlpbnQgcmV0X3ZhbCA9IEZQR0FfRkFJTDsKKworCXN3aXRjaCAoZGVzYy0+aWZhY2UpIHsKKwljYXNlIHBhc3NpdmVfc2VyaWFsOgorCQlQUklOVEYgKCIlczogTGF1bmNoaW5nIFBhc3NpdmUgU2VyaWFsIExvYWRlclxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0X3ZhbCA9IENZQzJfcHNfbG9hZCAoZGVzYywgYnVmLCBic2l6ZSk7CisJCWJyZWFrOworCisJCS8qIEFkZCBuZXcgaW50ZXJmYWNlIHR5cGVzIGhlcmUgKi8KKworCWRlZmF1bHQ6CisJCXByaW50ZiAoIiVzOiBVbnN1cHBvcnRlZCBpbnRlcmZhY2UgdHlwZSwgJWRcbiIsCisJCQkJX19GVU5DVElPTl9fLCBkZXNjLT5pZmFjZSk7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKK2ludCBDWUMyX2R1bXAgKEFsdGVyYV9kZXNjICogZGVzYywgdm9pZCAqYnVmLCBzaXplX3QgYnNpemUpCit7CisJaW50IHJldF92YWwgPSBGUEdBX0ZBSUw7CisKKwlzd2l0Y2ggKGRlc2MtPmlmYWNlKSB7CisJY2FzZSBwYXNzaXZlX3NlcmlhbDoKKwkJUFJJTlRGICgiJXM6IExhdW5jaGluZyBQYXNzaXZlIFNlcmlhbCBEdW1wXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXRfdmFsID0gQ1lDMl9wc19kdW1wIChkZXNjLCBidWYsIGJzaXplKTsKKwkJYnJlYWs7CisKKwkJLyogQWRkIG5ldyBpbnRlcmZhY2UgdHlwZXMgaGVyZSAqLworCisJZGVmYXVsdDoKKwkJcHJpbnRmICgiJXM6IFVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlLCAlZFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIGRlc2MtPmlmYWNlKTsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworaW50IENZQzJfaW5mbyggQWx0ZXJhX2Rlc2MgKmRlc2MgKQoreworCXJldHVybiBGUEdBX1NVQ0NFU1M7Cit9CisKK2ludCBDWUMyX3JlbG9jIChBbHRlcmFfZGVzYyAqIGRlc2MsIHVsb25nIHJlbG9jX29mZnNldCkKK3sKKwlpbnQgcmV0X3ZhbCA9IEZQR0FfRkFJTDsJLyogYXNzdW1lIGEgZmFpbHVyZSAqLworCisJaWYgKGRlc2MtPmZhbWlseSAhPSBBbHRlcmFfQ1lDMikgeworCQlwcmludGYgKCIlczogVW5zdXBwb3J0ZWQgZmFtaWx5IHR5cGUsICVkXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgZGVzYy0+ZmFtaWx5KTsKKwkJcmV0dXJuIEZQR0FfRkFJTDsKKwl9IGVsc2UKKwkJc3dpdGNoIChkZXNjLT5pZmFjZSkgeworCQljYXNlIHBhc3NpdmVfc2VyaWFsOgorCQkJcmV0X3ZhbCA9IENZQzJfcHNfcmVsb2MgKGRlc2MsIHJlbG9jX29mZnNldCk7CisJCQlicmVhazsKKworCQkvKiBBZGQgbmV3IGludGVyZmFjZSB0eXBlcyBoZXJlICovCisKKwkJZGVmYXVsdDoKKwkJCXByaW50ZiAoIiVzOiBVbnN1cHBvcnRlZCBpbnRlcmZhY2UgdHlwZSwgJWRcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgZGVzYy0+aWZhY2UpOworCQl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQ1lDTE9OMiBQYXNzaXZlIFNlcmlhbCBHZW5lcmljIEltcGxlbWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitzdGF0aWMgaW50IENZQzJfcHNfbG9hZCAoQWx0ZXJhX2Rlc2MgKiBkZXNjLCB2b2lkICpidWYsIHNpemVfdCBic2l6ZSkKK3sKKwlpbnQgcmV0X3ZhbCA9IEZQR0FfRkFJTDsJLyogYXNzdW1lIHRoZSB3b3JzdCAqLworCUFsdGVyYV9DWUMyX1Bhc3NpdmVfU2VyaWFsX2ZucyAqZm4gPSBkZXNjLT5pZmFjZV9mbnM7CisJaW50CXJldCA9IDA7CisKKwlQUklOVEYgKCIlczogc3RhcnQgd2l0aCBpbnRlcmZhY2UgZnVuY3Rpb25zIEAgMHglcFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgZm4pOworCisJaWYgKGZuKSB7CisJCWludCBjb29raWUgPSBkZXNjLT5jb29raWU7CS8qIG1ha2UgYSBsb2NhbCBjb3B5ICovCisJCXVuc2lnbmVkIGxvbmcgdHM7CQkvKiB0aW1lc3RhbXAgKi8KKworCQlQUklOVEYgKCIlczogRnVuY3Rpb24gVGFibGU6XG4iCisJCQkJInB0cjpcdDB4JXBcbiIKKwkJCQkic3RydWN0OiAweCVwXG4iCisJCQkJImNvbmZpZzpcdDB4JXBcbiIKKwkJCQkic3RhdHVzOlx0MHglcFxuIgorCQkJCSJ3cml0ZTpcdDB4JXBcbiIKKwkJCQkiZG9uZTpcdDB4JXBcblxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sICZmbiwgZm4sIGZuLT5jb25maWcsIGZuLT5zdGF0dXMsCisJCQkJZm4tPndyaXRlLCBmbi0+ZG9uZSk7CisjaWZkZWYgQ0ZHX0ZQR0FfUFJPR19GRUVEQkFDSworCQlwcmludGYgKCJMb2FkaW5nIEZQR0EgRGV2aWNlICVkLi4uIiwgY29va2llKTsKKyNlbmRpZgorCisJCS8qCisJCSAqIFJ1biB0aGUgcHJlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb24gaWYgdGhlcmUgaXMgb25lLgorCQkgKi8KKwkJaWYgKCpmbi0+cHJlKSB7CisJCQkoKmZuLT5wcmUpIChjb29raWUpOworCQl9CisKKwkJLyogRXN0YWJsaXNoIHRoZSBpbml0aWFsIHN0YXRlICovCisJCSgqZm4tPmNvbmZpZykgKFRSVUUsIFRSVUUsIGNvb2tpZSk7CS8qIEFzc2VydCBuQ09ORklHICovCisKKwkJdWRlbGF5KDIpOwkJLyogVF9jZmcgPiAydXMJKi8KKworCQkvKiBXYWl0IGZvciBuU1RBVFVTIHRvIGJlIGFzc2VydGVkICovCisJCXRzID0gZ2V0X3RpbWVyICgwKTsJCS8qIGdldCBjdXJyZW50IHRpbWUgKi8KKwkJZG8geworCQkJQ09ORklHX0ZQR0FfREVMQVkgKCk7CisJCQlpZiAoZ2V0X3RpbWVyICh0cykgPiBDRkdfRlBHQV9XQUlUKSB7CS8qIGNoZWNrIHRoZSB0aW1lICovCisJCQkJcHV0cyAoIioqIFRpbWVvdXQgd2FpdGluZyBmb3IgU1RBVFVTIHRvIGdvIGhpZ2guXG4iKTsKKwkJCQkoKmZuLT5hYm9ydCkgKGNvb2tpZSk7CisJCQkJcmV0dXJuIEZQR0FfRkFJTDsKKwkJCX0KKwkJfSB3aGlsZSAoISgqZm4tPnN0YXR1cykgKGNvb2tpZSkpOworCisJCS8qIEdldCByZWFkeSBmb3IgdGhlIGJ1cm4gKi8KKwkJQ09ORklHX0ZQR0FfREVMQVkgKCk7CisKKwkJcmV0ID0gKCpmbi0+d3JpdGUpIChidWYsIGJzaXplLCBUUlVFLCBjb29raWUpOworCQlpZiAocmV0KSB7CisJCQlwdXRzICgiKiogV3JpdGUgZmFpbGVkLlxuIik7CisJCQkoKmZuLT5hYm9ydCkgKGNvb2tpZSk7CisJCQlyZXR1cm4gRlBHQV9GQUlMOworCQl9CisjaWZkZWYgQ0ZHX0ZQR0FfUFJPR19GRUVEQkFDSworCQlwdXRzKCIgT0s/IC4uLiIpOworI2VuZGlmCisKKwkJQ09ORklHX0ZQR0FfREVMQVkgKCk7CisKKyNpZmRlZiBDRkdfRlBHQV9QUk9HX0ZFRURCQUNLCisJCXB1dGMgKCcgJyk7CQkJLyogdGVybWluYXRlIHRoZSBkb3R0ZWQgbGluZSAqLworI2VuZGlmCisKKwkvKgorCSAqIENoZWNraW5nIEZQR0EncyBDT05GX0RPTkUgc2lnbmFsIC0gY29ycmVjdGx5IGJvb3RlZCA/CisJICovCisKKwlpZiAoICEgKCpmbi0+ZG9uZSkgKGNvb2tpZSkgKSB7CisJCXB1dHMgKCIqKiBCb290aW5nIGZhaWxlZCEgQ09ORl9ET05FIGlzIHN0aWxsIGRlYXNzZXJ0ZWQuXG4iKTsKKwkJKCpmbi0+YWJvcnQpIChjb29raWUpOworCQlyZXR1cm4gKEZQR0FfRkFJTCk7CisJfQorI2lmZGVmIENGR19GUEdBX1BST0dfRkVFREJBQ0sKKwlwdXRzKCIgT0tcbiIpOworI2VuZGlmCisKKwlyZXRfdmFsID0gRlBHQV9TVUNDRVNTOworCisjaWZkZWYgQ0ZHX0ZQR0FfUFJPR19GRUVEQkFDSworCWlmIChyZXRfdmFsID09IEZQR0FfU1VDQ0VTUykgeworCQlwdXRzICgiRG9uZS5cbiIpOworCX0KKwllbHNlIHsKKwkJcHV0cyAoIkZhaWwuXG4iKTsKKwl9CisjZW5kaWYKKwkoKmZuLT5wb3N0KSAoY29va2llKTsKKworCX0gZWxzZSB7CisJCXByaW50ZiAoIiVzOiBOVUxMIEludGVyZmFjZSBmdW5jdGlvbiB0YWJsZSFcbiIsIF9fRlVOQ1RJT05fXyk7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyBpbnQgQ1lDMl9wc19kdW1wIChBbHRlcmFfZGVzYyAqIGRlc2MsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJzaXplKQoreworCS8qIFJlYWRiYWNrIGlzIG9ubHkgYXZhaWxhYmxlIHRocm91Z2ggdGhlIFNsYXZlIFBhcmFsbGVsIGFuZCAgICAgICAgICovCisJLyogYm91bmRhcnktc2NhbiBpbnRlcmZhY2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlwcmludGYgKCIlczogUGFzc2l2ZSBTZXJpYWwgRHVtcGluZyBpcyB1bmF2YWlsYWJsZVxuIiwKKwkJCV9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIEZQR0FfRkFJTDsKK30KKworc3RhdGljIGludCBDWUMyX3BzX3JlbG9jIChBbHRlcmFfZGVzYyAqIGRlc2MsIHVsb25nIHJlbG9jX29mZnNldCkKK3sKKwlpbnQgcmV0X3ZhbCA9IEZQR0FfRkFJTDsJLyogYXNzdW1lIHRoZSB3b3JzdCAqLworCUFsdGVyYV9DWUMyX1Bhc3NpdmVfU2VyaWFsX2ZucyAqZm5fciwgKmZuID0KKwkJCShBbHRlcmFfQ1lDMl9QYXNzaXZlX1NlcmlhbF9mbnMgKikgKGRlc2MtPmlmYWNlX2Zucyk7CisKKwlpZiAoZm4pIHsKKwkJdWxvbmcgYWRkcjsKKworCQkvKiBHZXQgdGhlIHJlbG9jYXRlZCB0YWJsZSBhZGRyZXNzICovCisJCWFkZHIgPSAodWxvbmcpIGZuICsgcmVsb2Nfb2Zmc2V0OworCQlmbl9yID0gKEFsdGVyYV9DWUMyX1Bhc3NpdmVfU2VyaWFsX2ZucyAqKSBhZGRyOworCisJCWlmICghZm5fci0+cmVsb2NhdGVkKSB7CisKKwkJCWlmIChtZW1jbXAgKGZuX3IsIGZuLAorCQkJCQkJc2l6ZW9mIChBbHRlcmFfQ1lDMl9QYXNzaXZlX1NlcmlhbF9mbnMpKQorCQkJCT09IDApIHsKKwkJCQkvKiBnb29kIGNvcHkgb2YgdGhlIHRhYmxlLCBmaXggdGhlIGRlc2NyaXB0b3IgcG9pbnRlciAqLworCQkJCWRlc2MtPmlmYWNlX2ZucyA9IGZuX3I7CisJCQl9IGVsc2UgeworCQkJCVBSSU5URiAoIiVzOiBJbnZhbGlkIGZ1bmN0aW9uIHRhYmxlIGF0IDB4JXBcbiIsCisJCQkJCQlfX0ZVTkNUSU9OX18sIGZuX3IpOworCQkJCXJldHVybiBGUEdBX0ZBSUw7CisJCQl9CisKKwkJCVBSSU5URiAoIiVzOiBSZWxvY2F0aW5nIGRlc2NyaXB0b3IgYXQgMHglcFxuIiwgX19GVU5DVElPTl9fLAorCQkJCQlkZXNjKTsKKworCQkJYWRkciA9ICh1bG9uZykgKGZuLT5wcmUpICsgcmVsb2Nfb2Zmc2V0OworCQkJZm5fci0+cHJlID0gKEFsdGVyYV9wcmVfZm4pIGFkZHI7CisKKwkJCWFkZHIgPSAodWxvbmcpIChmbi0+Y29uZmlnKSArIHJlbG9jX29mZnNldDsKKwkJCWZuX3ItPmNvbmZpZyA9IChBbHRlcmFfY29uZmlnX2ZuKSBhZGRyOworCisJCQlhZGRyID0gKHVsb25nKSAoZm4tPnN0YXR1cykgKyByZWxvY19vZmZzZXQ7CisJCQlmbl9yLT5zdGF0dXMgPSAoQWx0ZXJhX3N0YXR1c19mbikgYWRkcjsKKworCQkJYWRkciA9ICh1bG9uZykgKGZuLT5kb25lKSArIHJlbG9jX29mZnNldDsKKwkJCWZuX3ItPmRvbmUgPSAoQWx0ZXJhX2RvbmVfZm4pIGFkZHI7CisKKwkJCWFkZHIgPSAodWxvbmcpIChmbi0+d3JpdGUpICsgcmVsb2Nfb2Zmc2V0OworCQkJZm5fci0+d3JpdGUgPSAoQWx0ZXJhX3dyaXRlX2ZuKSBhZGRyOworCisJCQlhZGRyID0gKHVsb25nKSAoZm4tPmFib3J0KSArIHJlbG9jX29mZnNldDsKKwkJCWZuX3ItPmFib3J0ID0gKEFsdGVyYV9hYm9ydF9mbikgYWRkcjsKKworCQkJYWRkciA9ICh1bG9uZykgKGZuLT5wb3N0KSArIHJlbG9jX29mZnNldDsKKwkJCWZuX3ItPnBvc3QgPSAoQWx0ZXJhX3Bvc3RfZm4pIGFkZHI7CisKKwkJCWZuX3ItPnJlbG9jYXRlZCA9IFRSVUU7CisKKwkJfSBlbHNlIHsKKwkJCS8qIHRoaXMgdGFibGUgaGFzIGFscmVhZHkgYmVlbiBtb3ZlZCAqLworCQkJLyogWFhYIC0gc2hvdWxkIGNoZWNrIHRvIHNlZSBpZiB0aGUgZGVzY3JpcHRvciBpcyBjb3JyZWN0ICovCisJCQlkZXNjLT5pZmFjZV9mbnMgPSBmbl9yOworCQl9CisKKwkJcmV0X3ZhbCA9IEZQR0FfU1VDQ0VTUzsKKwl9IGVsc2UgeworCQlwcmludGYgKCIlczogTlVMTCBJbnRlcmZhY2UgZnVuY3Rpb24gdGFibGUhXG4iLCBfX0ZVTkNUSU9OX18pOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisjZW5kaWYgLyogKENPTkZJR19GUEdBICYgKENGR19BTFRFUkEgfCBDRkdfQ1lDTE9OMikpICovCmRpZmYgLS1naXQgYS9jb21tb24vZnBnYS5jIGIvY29tbW9uL2ZwZ2EuYwppbmRleCAwMmQzZTQyLi4yZWZmMjM5IDEwMDY0NAotLS0gYS9jb21tb24vZnBnYS5jCisrKyBiL2NvbW1vbi9mcGdhLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCQkJcHJpbnRmKCAiWGlsaW54IERldmljZVxuRGVzY3JpcHRvciBAIDB4JXBcbiIsIGRlc2MgKTsKIAkJCXJldF92YWwgPSB4aWxpbnhfaW5mbyggZGVzYy0+ZGV2ZGVzYyApOwogI2Vsc2UKLQkJCWZwZ2Ffbm9fc3VwKCBfX0ZVTkNUSU9OX18sICJYaWxpbnggZGV2aWNlcyIgKTsKKwkJCWZwZ2Ffbm9fc3VwKCAoY2hhciAqKV9fRlVOQ1RJT05fXywgIlhpbGlueCBkZXZpY2VzIiApOwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBmcGdhX2FsdGVyYToKQEAgLTE3OCw3ICsxNzgsNyBAQAogI2lmIENPTkZJR19GUEdBICYgQ0ZHX0ZQR0FfWElMSU5YCiAJCXJldF92YWwgPSB4aWxpbnhfcmVsb2MoIGRlc2MsIHJlbG9jX29mZiApOwogI2Vsc2UKLQkJZnBnYV9ub19zdXAoIF9fRlVOQ1RJT05fXywgIlhpbGlueCBkZXZpY2VzIiApOworCQlmcGdhX25vX3N1cCggKGNoYXIgKilfX0ZVTkNUSU9OX18sICJYaWxpbnggZGV2aWNlcyIgKTsKICNlbmRpZgogCQlicmVhazsKIAljYXNlIGZwZ2FfYWx0ZXJhOgpAQCAtMjcxLDcgKzI3MSw3IEBACiAjaWYgQ09ORklHX0ZQR0EgJiBDRkdfRlBHQV9YSUxJTlgKIAkJCXJldF92YWwgPSB4aWxpbnhfbG9hZCggZGVzYy0+ZGV2ZGVzYywgYnVmLCBic2l6ZSApOwogI2Vsc2UKLQkJCWZwZ2Ffbm9fc3VwKCBfX0ZVTkNUSU9OX18sICJYaWxpbnggZGV2aWNlcyIgKTsKKwkJCWZwZ2Ffbm9fc3VwKCAoY2hhciAqKV9fRlVOQ1RJT05fXywgIlhpbGlueCBkZXZpY2VzIiApOwogI2VuZGlmCiAJCQlicmVhazsKIAkJY2FzZSBmcGdhX2FsdGVyYToKQEAgLTMwNCw3ICszMDQsNyBAQAogI2lmIENPTkZJR19GUEdBICYgQ0ZHX0ZQR0FfWElMSU5YCiAJCQlyZXRfdmFsID0geGlsaW54X2R1bXAoIGRlc2MtPmRldmRlc2MsIGJ1ZiwgYnNpemUgKTsKICNlbHNlCi0JCQlmcGdhX25vX3N1cCggX19GVU5DVElPTl9fLCAiWGlsaW54IGRldmljZXMiICk7CisJCQlmcGdhX25vX3N1cCggKGNoYXIgKilfX0ZVTkNUSU9OX18sICJYaWxpbnggZGV2aWNlcyIgKTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCWNhc2UgZnBnYV9hbHRlcmE6CmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4LzQwNWdwX3BjaS5jIGIvY3B1L3BwYzR4eC80MDVncF9wY2kuYwppbmRleCAwMzEyOGQzLi45YjcxMWUyIDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4LzQwNWdwX3BjaS5jCisrKyBiL2NwdS9wcGM0eHgvNDA1Z3BfcGNpLmMKQEAgLTQ3NSw3ICs0NzUsMTEgQEAKIAlwY2lfc2V0X3JlZ2lvbihob3NlLT5yZWdpb25zICsgcmVnX251bSsrLAogCQkgICAgICAgQ0ZHX1BDSV9UQVJHQkFTRSwKIAkJICAgICAgIENGR19QQ0lfTUVNQkFTRSwKKyNpZmRlZiBDRkdfUENJX01FTVNJWkUKKwkJICAgICAgIENGR19QQ0lfTUVNU0laRSwKKyNlbHNlCiAJCSAgICAgICAweDEwMDAwMDAwLAorI2VuZGlmCiAJCSAgICAgICBQQ0lfUkVHSU9OX01FTSApOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUENJX1NZU19NRU1fQlVTKSAmJiBkZWZpbmVkKENPTkZJR19QQ0lfU1lTX01FTV9QSFlTKSAmJiBcCmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L2NwdS5jIGIvY3B1L3BwYzR4eC9jcHUuYwppbmRleCBmNGE3MjA4Li5mYWE1MjU3IDEwMDY0NAotLS0gYS9jcHUvcHBjNHh4L2NwdS5jCisrKyBiL2NwdS9wcGM0eHgvY3B1LmMKQEAgLTQxLDYgKzQxLDEwIEBACiBERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfQk9BUkRfUkVTRVQpCit2b2lkIGJvYXJkX3Jlc2V0KHZvaWQpOworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR180NDApCiAjZGVmaW5lIEZSRVFfRUJDCQkoc3lzX2luZm8uZnJlcUVQQikKICNlbHNlCkBAIC00MjIsMjMgKzQyNiwxNSBAQAogCiBpbnQgZG9fcmVzZXQgKGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotI2lmIGRlZmluZWQoQ09ORklHX1lPU0VNSVRFKSB8fCBkZWZpbmVkKENPTkZJR19ZRUxMT1dTVE9ORSkKLQkvKmdpdmUgcmVzZXQgdG8gQkNTUiovCi0JKih1bnNpZ25lZCBjaGFyKikoQ0ZHX0JDU1JfQkFTRSB8IDB4MDYpID0gMHgwOTsKLQorI2lmIGRlZmluZWQoQ09ORklHX0JPQVJEX1JFU0VUKQorCWJvYXJkX3Jlc2V0KCk7CiAjZWxzZQotCiAJLyoKIAkgKiBJbml0aWF0ZSBzeXN0ZW0gcmVzZXQgaW4gZGVidWcgY29udHJvbCByZWdpc3RlciBEQkNSCiAJICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImxpcyAgIDMsIDB4MzAwMCIgOjo6ICJyMyIpOwotI2lmIGRlZmluZWQoQ09ORklHXzQ0MCkKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibXRzcHIgMHgxMzQsIDMiKTsKLSNlbHNlCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oIm10c3ByIDB4M2YyLCAzIik7Ci0jZW5kaWYKKwltdHNwcihkYmNyMCwgMHgzMDAwMDAwMCk7CisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfQk9BUkRfUkVTRVQpICovCiAKLSNlbmRpZi8qIGRlZmluZWQoQ09ORklHX1lPU0VNSVRFKSB8fCBkZWZpbmVkKENPTkZJR19ZRUxMT1dTVE9ORSkqLwogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9jcHUvcHBjNHh4L3NkcmFtLmMgYi9jcHUvcHBjNHh4L3NkcmFtLmMKaW5kZXggZmFlZWE1Yy4uZjA2MDM4ZSAxMDA2NDQKLS0tIGEvY3B1L3BwYzR4eC9zZHJhbS5jCisrKyBiL2NwdS9wcGM0eHgvc2RyYW0uYwpAQCAtMzUxLDYgKzM1MSwxNCBAQAogCWludCBpOwogCWludCB0cjFfYmFuazE7CiAKKyNpZiBkZWZpbmVkKENPTkZJR180NDBHWCkgfHwgZGVmaW5lZChDT05GSUdfNDQwRVApIHx8IGRlZmluZWQoQ09ORklHXzQ0MEdSKSB8fCBkZWZpbmVkKENPTkZJR180NDBTUCkKKwkvKgorCSAqIFNvZnQtcmVzZXQgU0RSQU0gY29udHJvbGxlci4KKwkgKi8KKwltdHNkcihzZHJfc3JzdCwgU0RSMF9TUlNUX0RNQyk7CisJbXRzZHIoc2RyX3Nyc3QsIDB4MDAwMDAwMDApOworI2VuZGlmCisKIAlmb3IgKGk9MDsgaTxOX01CMENGOyBpKyspIHsKIAkJLyoKIAkJICogRGlzYWJsZSBtZW1vcnkgY29udHJvbGxlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmFuZC9uYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbmFuZC9uYW5kX2Jhc2UuYwppbmRleCBiN2E1ZDMyLi5iMDAzMDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25hbmQvbmFuZF9iYXNlLmMKKysrIGIvZHJpdmVycy9uYW5kL25hbmRfYmFzZS5jCkBAIC0yNDA3LDcgKzI0MDcsOSBAQAogCX0KIAogCWlmICghbmFuZF9mbGFzaF9pZHNbaV0ubmFtZSkgeworI2lmbmRlZiBDRkdfTkFORF9RVUlFVF9URVNUCiAJCXByaW50ayAoS0VSTl9XQVJOSU5HICJObyBOQU5EIGRldmljZSBmb3VuZCEhIVxuIik7CisjZW5kaWYKIAkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CiAJCXJldHVybiAxOwogCX0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvQUNFWDFLLmggYi9pbmNsdWRlL0FDRVgxSy5oCmluZGV4IGY3NWM0NjMuLmYyNDlkNjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvQUNFWDFLLmgKKysrIGIvaW5jbHVkZS9BQ0VYMUsuaApAQCAtMzUsNiArMzUsMTEgQEAKIGV4dGVybiBpbnQgQUNFWDFLX2luZm8oIEFsdGVyYV9kZXNjICpkZXNjICk7CiBleHRlcm4gaW50IEFDRVgxS19yZWxvYyggQWx0ZXJhX2Rlc2MgKmRlc2MsIHVsb25nIHJlbG9jX29mZiApOwogCitleHRlcm4gaW50IENZQzJfbG9hZCggQWx0ZXJhX2Rlc2MgKmRlc2MsIHZvaWQgKmltYWdlLCBzaXplX3Qgc2l6ZSApOworZXh0ZXJuIGludCBDWUMyX2R1bXAoIEFsdGVyYV9kZXNjICpkZXNjLCB2b2lkICpidWYsIHNpemVfdCBic2l6ZSApOworZXh0ZXJuIGludCBDWUMyX2luZm8oIEFsdGVyYV9kZXNjICpkZXNjICk7CitleHRlcm4gaW50IENZQzJfcmVsb2MoIEFsdGVyYV9kZXNjICpkZXNjLCB1bG9uZyByZWxvY19vZmYgKTsKKwogLyogU2xhdmUgU2VyaWFsIEltcGxlbWVudGF0aW9uIGZ1bmN0aW9uIHRhYmxlICovCiB0eXBlZGVmIHN0cnVjdCB7CiAJQWx0ZXJhX3ByZV9mbgkJcHJlOwpAQCAtNDgsNiArNTMsMTggQEAKIAlpbnQJCQlyZWxvY2F0ZWQ7CiB9IEFsdGVyYV9BQ0VYMUtfUGFzc2l2ZV9TZXJpYWxfZm5zOwogCisvKiBTbGF2ZSBTZXJpYWwgSW1wbGVtZW50YXRpb24gZnVuY3Rpb24gdGFibGUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlBbHRlcmFfcHJlX2ZuCQlwcmU7CisJQWx0ZXJhX2NvbmZpZ19mbgljb25maWc7CisJQWx0ZXJhX3N0YXR1c19mbglzdGF0dXM7CisJQWx0ZXJhX2RvbmVfZm4JCWRvbmU7CisJQWx0ZXJhX3dyaXRlX2ZuCQl3cml0ZTsKKwlBbHRlcmFfYWJvcnRfZm4JCWFib3J0OworCUFsdGVyYV9wb3N0X2ZuCQlwb3N0OworCWludAkJCXJlbG9jYXRlZDsKK30gQWx0ZXJhX0NZQzJfUGFzc2l2ZV9TZXJpYWxfZm5zOworCiAvKiBEZXZpY2UgSW1hZ2UgU2l6ZXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBBQ0VYMUsgKi8KQEAgLTYwLDYgKzc3LDggQEAKICNlbmRpZgogI2RlZmluZSBBbHRlcmFfRVAxSzEwMF9TSVpFICAJKDE2Njk2NSo4KQogCisjZGVmaW5lIEFsdGVyYV9FUDJDMzVfU0laRQk4ODM5MDUKKwogLyogRGVzY3JpcHRvciBNYWNyb3MKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBBQ0VYMUsgZGV2aWNlcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hbHRlcmEuaCBiL2luY2x1ZGUvYWx0ZXJhLmgKaW5kZXggNzRiNjcyOS4uN2I4Y2I0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hbHRlcmEuaAorKysgYi9pbmNsdWRlL2FsdGVyYS5oCkBAIC0zNCw4ICszNCwxMCBAQAogLyogQWx0ZXJhIE1vZGVsIGRlZmluaXRpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBDRkdfQUNFWDFLCQlDRkdfRlBHQV9ERVYoIDB4MSApCisjZGVmaW5lIENGR19DWUNMT04yCQlDRkdfRlBHQV9ERVYoIDB4MiApCiAKICNkZWZpbmUgQ0ZHX0FMVEVSQV9BQ0VYMUsJKENGR19GUEdBX0FMVEVSQSB8IENGR19BQ0VYMUspCisjZGVmaW5lIENGR19BTFRFUkFfQ1lDTE9OMgkoQ0ZHX0ZQR0FfQUxURVJBIHwgQ0ZHX0NZQ0xPTjIpCiAvKiBBZGQgbmV3IG1vZGVscyBoZXJlICovCiAKIC8qIEFsdGVyYSBJbnRlcmZhY2UgZGVmaW5pdGlvbnMKQEAgLTU2LDYgKzU4LDcgQEAKIHR5cGVkZWYgZW51bSB7CQkJLyogdHlwZWRlZiBBbHRlcmFfRmFtaWx5ICovCiAgICAgbWluX2FsdGVyYV90eXBlLAkJLyogaW5zZXJ0IGFsbCBuZXcgdHlwZXMgYWZ0ZXIgdGhpcyAqLwogICAgIEFsdGVyYV9BQ0VYMUssCQkvKiBBQ0VYMUsgRmFtaWx5ICovCisgICAgQWx0ZXJhX0NZQzIsCQkvKiBDWUNMT05JSSBGYW1pbHkgKi8KIC8qIEFkZCBuZXcgbW9kZWxzIGhlcmUgKi8KICAgICBtYXhfYWx0ZXJhX3R5cGUJCS8qIGluc2VydCBhbGwgbmV3IHR5cGVzIGJlZm9yZSB0aGlzICovCiB9IEFsdGVyYV9GYW1pbHk7CQkvKiBlbmQsIHR5cGVkZWYgQWx0ZXJhX0ZhbWlseSAqLwpAQCAtODQsNiArODcsNyBAQAogdHlwZWRlZiBpbnQgKCpBbHRlcmFfZG9uZV9mbikoIGludCBjb29raWUgKTsKIHR5cGVkZWYgaW50ICgqQWx0ZXJhX2Nsa19mbikoIGludCBhc3NlcnRfY2xrLCBpbnQgZmx1c2gsIGludCBjb29raWUgKTsKIHR5cGVkZWYgaW50ICgqQWx0ZXJhX2RhdGFfZm4pKCBpbnQgYXNzZXJ0X2RhdGEsIGludCBmbHVzaCwgaW50IGNvb2tpZSApOwordHlwZWRlZiBpbnQgKCpBbHRlcmFfd3JpdGVfZm4pKHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IGZsdXNoLCBpbnQgY29va2llKTsKIHR5cGVkZWYgaW50ICgqQWx0ZXJhX2Fib3J0X2ZuKSggaW50IGNvb2tpZSApOwogdHlwZWRlZiBpbnQgKCpBbHRlcmFfcG9zdF9mbikoIGludCBjb29raWUgKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWdzL2FscHIuaCBiL2luY2x1ZGUvY29uZmlncy9hbHByLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY3MzFiYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9hbHByLmgKQEAgLTAsMCArMSwzNTIgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDYKKyAqIFN0ZWZhbiBSb2VzZSwgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgc3JAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9fQ09ORklHX0gKKyNkZWZpbmUgX19DT05GSUdfSAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBIaWdoIExldmVsIENvbmZpZ3VyYXRpb24gT3B0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQ09ORklHX0FMUFIJCTEJICAgIC8qIEJvYXJkIGlzIGVib255CQkqLworI2RlZmluZSBDT05GSUdfNDQwR1gJCTEJICAgIC8qIFNwZWNpZmMgR1ggc3VwcG9ydAkqLworI2RlZmluZSBDT05GSUdfNHh4CQkxCSAgICAvKiAuLi4gUFBDNHh4IGZhbWlseQkqLworI2RlZmluZSBDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9GIDEJICAgIC8qIENhbGwgYm9hcmRfcHJlX2luaXQJKi8KKyNkZWZpbmUgQ09ORklHX0JPQVJEX1JFU0VUCTEJICAgIC8qIGNhbGwgYm9hcmRfcmVzZXQoKQkqLworI3VuZGVmCUNGR19EUkFNX1RFU1QJCQkgICAgLyogRGlzYWJsZS10YWtlcyBsb25nIHRpbWUhICovCisjZGVmaW5lIENPTkZJR19TWVNfQ0xLX0ZSRVEJMzMzMzMwMDAgICAgLyogZXh0ZXJuYWwgZnJlcSB0byBwbGwJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQmFzZSBhZGRyZXNzZXMgLS0gTm90ZSB0aGVzZSBhcmUgZWZmZWN0aXZlIGFkZHJlc3NlcyB3aGVyZSB0aGUKKyAqIGFjdHVhbCByZXNvdXJjZXMgZ2V0IG1hcHBlZCAobm90IHBoeXNpY2FsIGFkZHJlc3NlcykKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENGR19TRFJBTV9CQVNFCSAgICAweDAwMDAwMDAwCSAgICAvKiBfbXVzdF8gYmUgMAkJKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX0JBU0UJICAgIDB4ZmZlMDAwMDAJICAgIC8qIHN0YXJ0IG9mIEZMQVNICQkqLworI2RlZmluZSBDRkdfTU9OSVRPUl9CQVNFICAgIDB4ZmZmYzAwMDAJICAgIC8qIHN0YXJ0IG9mIG1vbml0b3IJCSovCisjZGVmaW5lIENGR19QQ0lfTUVNQkFTRQkgICAgMHg4MDAwMDAwMAkgICAgLyogbWFwcGVkIHBjaSBtZW1vcnkJKi8KKyNkZWZpbmUJQ0ZHX1BDSV9NRU1TSVpFCSAgICAweDQwMDAwMDAwCSAgICAvKiBzaXplIG9mIG1hcHBlZCBwY2kgbWVtb3J5ICovCisjZGVmaW5lIENGR19QRVJJUEhFUkFMX0JBU0UgMHhlMDAwMDAwMAkgICAgLyogaW50ZXJuYWwgcGVyaXBoZXJhbHMJKi8KKyNkZWZpbmUgQ0ZHX0lTUkFNX0JBU0UJICAgIDB4YzAwMDAwMDAJICAgIC8qIGludGVybmFsIFNSQU0JCSovCisjZGVmaW5lIENGR19QQ0lfQkFTRQkgICAgMHhkMDAwMDAwMAkgICAgLyogaW50ZXJuYWwgUENJIHJlZ3MJKi8KKyNkZWZpbmUgQ0ZHX1BDSV9NRU1CQVNFMSAgICAgICAgQ0ZHX1BDSV9NRU1CQVNFICArIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSV9NRU1CQVNFMiAgICAgICAgQ0ZHX1BDSV9NRU1CQVNFMSArIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ0ZHX1BDSV9NRU1CQVNFMyAgICAgICAgQ0ZHX1BDSV9NRU1CQVNFMiArIDB4MTAwMDAwMDAKKworCisjZGVmaW5lIENGR19GUEdBX0JBU0UJICAgIChDRkdfUEVSSVBIRVJBTF9CQVNFICsgMHgwODMwMDAwMCkKKyNkZWZpbmUgQ0ZHX05WUkFNX0JBU0VfQUREUiAoQ0ZHX1BFUklQSEVSQUxfQkFTRSArIDB4MDgwMDAwMDApCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEluaXRpYWwgUkFNICYgc3RhY2sgcG9pbnRlciAocGxhY2VkIGluIGludGVybmFsIFNSQU0pCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDRkdfVEVNUF9TVEFDS19PQ00gIDEKKyNkZWZpbmUgQ0ZHX09DTV9EQVRBX0FERFIgICBDRkdfSVNSQU1fQkFTRQorI2RlZmluZSBDRkdfSU5JVF9SQU1fQUREUiAgIENGR19JU1JBTV9CQVNFICAvKiBJbml0aWFsIFJBTSBhZGRyZXNzCSovCisjZGVmaW5lIENGR19JTklUX1JBTV9FTkQgICAgMHgyMDAwCSAgICAvKiBFbmQgb2YgdXNlZCBhcmVhIGluIFJBTQkqLworI2RlZmluZSBDRkdfR0JMX0RBVEFfU0laRSAgIDEyOAkJICAgIC8qIG51bSBieXRlcyBpbml0aWFsIGRhdGEJKi8KKworI2RlZmluZSBDRkdfR0JMX0RBVEFfT0ZGU0VUCShDRkdfSU5JVF9SQU1fRU5EIC0gQ0ZHX0dCTF9EQVRBX1NJWkUpCisjZGVmaW5lIENGR19QT1NUX1dPUkRfQUREUgkoQ0ZHX0dCTF9EQVRBX09GRlNFVCAtIDB4NCkKKyNkZWZpbmUgQ0ZHX0lOSVRfU1BfT0ZGU0VUCUNGR19QT1NUX1dPUkRfQUREUgorCisjZGVmaW5lIENGR19NT05JVE9SX0xFTgkgICAgKDI1NiAqIDEwMjQpICAgIC8qIFJlc2VydmUgMjU2IGtCIGZvciBNb24JKi8KKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JICAgICgxMjggKiAxMDI0KSAgICAvKiBSZXNlcnZlIDEyOCBrQiBmb3IgbWFsbG9jKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU2VyaWFsIFBvcnQKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjdW5kZWYJQ0ZHX0VYVF9TRVJJQUxfQ0xPQ0sKKyNkZWZpbmUgQ09ORklHX0JBVURSQVRFCQkxMTUyMDAKKyNkZWZpbmUJQ09ORklHX1VBUlQxX0NPTlNPTEUJCS8qIGRlZmluZSBmb3IgdWFydDEgYXMgY29uc29sZQkqLworCisjZGVmaW5lIENGR19CQVVEUkFURV9UQUJMRSAgXAorICAgIHszMDAsIDYwMCwgMTIwMCwgMjQwMCwgNDgwMCwgOTYwMCwgMTkyMDAsIDM4NDAwLCA1NzYwMCwgMTE1MjAwfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGTEFTSCByZWxhdGVkCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBGTEFTSF9CQVNFMF9QUkVMSU0JQ0ZHX0ZMQVNIX0JBU0UJCS8qIEZMQVNIIGJhbmsgIzAJKi8KKworI2RlZmluZSBDRkdfTUFYX0ZMQVNIX0JBTktTCTEJLyogbWF4IG51bWJlciBvZiBtZW1vcnkgYmFua3MJCSovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkyNTYJLyogbWF4IG51bWJlciBvZiBzZWN0b3JzIG9uIG9uZSBjaGlwCSovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX0VSQVNFX1RPVVQJMTIwMDAwCS8qIFRpbWVvdXQgZm9yIEZsYXNoIEVyYXNlIChpbiBtcykJKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJMTAwMAkvKiBUaW1lb3V0IGZvciBGbGFzaCBXcml0ZSAoaW4gbXMpCSovCisKKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dPUkRfU0laRQl1bnNpZ25lZCBzaG9ydAkvKiBmbGFzaCB3b3JkIHNpemUgKHdpZHRoKQkqLworI2RlZmluZSBDRkdfRkxBU0hfQUREUjAJCTB4NTU1NQkvKiAxc3QgYWRkcmVzcyBmb3IgZmxhc2ggY29uZmlnIGN5Y2xlcwkqLworI2RlZmluZSBDRkdfRkxBU0hfQUREUjEJCTB4MkFBQQkvKiAybmQgYWRkcmVzcyBmb3IgZmxhc2ggY29uZmlnIGN5Y2xlcwkqLworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgYWRkZWQgZm9yIGJ1Z2d5IElPUDQ4MCBieXRlIGludGVyZmFjZS4KKyAqIEFsbCBvdGhlciBib2FyZHMgc2hvdWxkIHVzZSB0aGUgc3RhbmRhcmQgdmFsdWVzIChDUENJNDA1IGV0Yy4pCisgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1JFQUQwCQkweDAwMDAJLyogMCBpcyBzdGFuZGFyZAkJCSovCisjZGVmaW5lIENGR19GTEFTSF9SRUFEMQkJMHgwMDAxCS8qIDEgaXMgc3RhbmRhcmQJCQkqLworI2RlZmluZSBDRkdfRkxBU0hfUkVBRDIJCTB4MDAwMgkvKiAyIGlzIHN0YW5kYXJkCQkJKi8KKworI2RlZmluZSBDRkdfRkxBU0hfRU1QVFlfSU5GTwkJLyogcHJpbnQgJ0UnIGZvciBlbXB0eSBzZWN0b3Igb24gZmxpbmZvICovCisKKyNkZWZpbmUgQ0ZHX0VOVl9JU19JTl9GTEFTSCAgICAgMQkvKiB1c2UgRkxBU0ggZm9yIGVudmlyb25tZW50IHZhcnMJKi8KKworI2RlZmluZSBDRkdfRU5WX1NFQ1RfU0laRQkweDEwMDAwIAkvKiBzaXplIG9mIG9uZSBjb21wbGV0ZSBzZWN0b3IJKi8KKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkoQ0ZHX01PTklUT1JfQkFTRS1DRkdfRU5WX1NFQ1RfU0laRSkKKyNkZWZpbmUJQ0ZHX0VOVl9TSVpFCQkweDIwMDAJLyogVG90YWwgU2l6ZSBvZiBFbnZpcm9ubWVudCBTZWN0b3IJKi8KKworLyogQWRkcmVzcyBhbmQgc2l6ZSBvZiBSZWR1bmRhbnQgRW52aXJvbm1lbnQgU2VjdG9yCSovCisjZGVmaW5lIENGR19FTlZfQUREUl9SRURVTkQJKENGR19FTlZfQUREUi1DRkdfRU5WX1NFQ1RfU0laRSkKKyNkZWZpbmUgQ0ZHX0VOVl9TSVpFX1JFRFVORAkoQ0ZHX0VOVl9TSVpFKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBERFIgU0RSQU0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjdW5kZWYgQ09ORklHX1NQRF9FRVBST00JCS8qIERvbid0IHVzZSBTUEQgRUVQUk9NIGZvciBzZXR1cAkqLworI2RlZmluZSBDT05GSUdfU0RSQU1fQkFOSzAJMQkvKiBpbml0IG9uYm9hcmQgRERSIFNEUkFNIGJhbmsgMAkqLworI3VuZGVmIENPTkZJR19TRFJBTV9FQ0MJCQkvKiBlbmFibGUgRUNDIHN1cHBvcnQJCQkqLworI2RlZmluZSBDRkdfU0RSQU1fVEFCTEUJeyBcCisJCXsoMjU2IDw8IDIwKSwgMTMsIDB4MDAwQzQwMDF9LCAvKiAyNTZNQiBtb2RlIDMsIDEzeDEwKDQpKi8gXAorCQl7KDY0IDw8IDIwKSwgIDEyLCAweDAwMDgyMDAxfX0gLyogNjRNQiBtb2RlIDIsIDEyeDkoNCkJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSTJDCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDT05GSUdfSEFSRF9JMkMJCTEJLyogSTJDIHdpdGggaGFyZHdhcmUgc3VwcG9ydAkqLworI3VuZGVmCUNPTkZJR19TT0ZUX0kyQwkJCS8qIEkyQyBiaXQtYmFuZ2VkCQkqLworI2RlZmluZSBDRkdfSTJDX1NQRUVECQkxMDAwMDAJLyogSTJDIHNwZWVkIGFuZCBzbGF2ZSBhZGRyZXNzCSovCisjZGVmaW5lIENGR19JMkNfU0xBVkUJCTB4N0YKKyNkZWZpbmUgQ0ZHX0kyQ19OT1BST0JFUwl7MHg2OX0JLyogRG9uJ3QgcHJvYmUgdGhlc2UgYWRkcnMJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSTJDIEVFUFJPTSAoUENGODU5NEMpCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSCTB4NTQJLyogRUVQUk9NIFBDRjg1OTRDCQkqLworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX0xFTiAxCS8qIEJ5dGVzIG9mIGFkZHJlc3MJCSovCisvKiBtYXNrIG9mIGFkZHJlc3MgYml0cyB0aGF0IG92ZXJmbG93IGludG8gdGhlICJFRVBST00gY2hpcCBhZGRyZXNzIgkqLworI2RlZmluZSBDRkdfSTJDX0VFUFJPTV9BRERSX09WRVJGTE9XCTB4MDcKKyNkZWZpbmUgQ0ZHX0VFUFJPTV9QQUdFX1dSSVRFX0JJVFMgMwkvKiBUaGUgUGhpbGlwcyBQQ0Y4NTk0QyBoYXMJKi8KKwkJCQkJLyogOCBieXRlIHBhZ2Ugd3JpdGUgbW9kZSB1c2luZyAqLworCQkJCQkvKiBsYXN0IDMgYml0cyBvZiB0aGUgYWRkcmVzcwkqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfREVMQVlfTVMJNDAgICAvKiBhbmQgdGFrZXMgdXAgdG8gNDAgbXNlYyAqLworI2RlZmluZSBDRkdfRUVQUk9NX1BBR0VfV1JJVEVfRU5BQkxFCisKKyNkZWZpbmUgQ09ORklHX1BSRUJPT1QJImVjaG87IglcCisJImVjaG8gVHlwZSBcInJ1biBmbGFzaF9uZnNcIiB0byBtb3VudCByb290IGZpbGVzeXN0ZW0gb3ZlciBORlM7IiBcCisJImVjaG8iCisKKyN1bmRlZglDT05GSUdfQk9PVEFSR1MKKworI2RlZmluZQlDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTCQkJCQlcCisJIm5ldGRldj1ldGgwXDAiCQkJCQkJCVwKKwkiaG9zdG5hbWU9YWxwclwwIgkJCQkJCVwKKwkibmZzYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L25mcyBydyAiCQkJXAorCQkibmZzcm9vdD0ke3NlcnZlcmlwfToke3Jvb3RwYXRofVwwIgkJCVwKKwkicmFtYXJncz1zZXRlbnYgYm9vdGFyZ3Mgcm9vdD0vZGV2L3JhbSByd1wwIgkJCVwKKwkiYWRkaXA9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9ICIJCQkJXAorCQkiaXA9JHtpcGFkZHJ9OiR7c2VydmVyaXB9OiR7Z2F0ZXdheWlwfToke25ldG1hc2t9IglcCisJCSI6JHtob3N0bmFtZX06JHtuZXRkZXZ9Om9mZiBwYW5pYz0xXDAiCQkJXAorCSJhZGR0dHk9c2V0ZW52IGJvb3RhcmdzICR7Ym9vdGFyZ3N9IGNvbnNvbGU9dHR5UzEsJHtiYXVkcmF0ZX1cMCJcCisJImZsYXNoX25mcz1ydW4gbmZzYXJncyBhZGRpcCBhZGR0dHk7IgkJCQlcCisJCSJib290bSAke2tlcm5lbF9hZGRyfVwwIgkJCQlcCisJImZsYXNoX3NlbGY9cnVuIHJhbWFyZ3MgYWRkaXAgYWRkdHR5OyIJCQkJXAorCQkiYm9vdG0gJHtrZXJuZWxfYWRkcn0gJHtyYW1kaXNrX2FkZHJ9XDAiCQlcCisJIm5ldF9uZnM9dGZ0cCAyMDAwMDAgJHtib290ZmlsZX07cnVuIG5mc2FyZ3MgYWRkaXAgYWRkdHR5OyIgICAgIFwKKwkgICAgICAgICJib290bVwwIgkJCQkJCVwKKwkicm9vdHBhdGg9L29wdC9lbGRrL3BwY180eHhcMCIJCQkJCVwKKwkiYm9vdGZpbGU9L3RmdHBib290L2FscHIvdUltYWdlXDAiCQkJCVwKKwkia2VybmVsX2FkZHI9ZmZmMDAwMDBcMCIJCQkJCVwKKwkicmFtZGlza19hZGRyPWZmZjEwMDAwXDAiCQkJCQlcCisJImxvYWQ9dGZ0cCAxMDAwMDAgL3RmdHBib290L2FscHIvdS1ib290LmJpblwwIgkJCVwKKwkidXBkYXRlPXByb3RlY3Qgb2ZmIGZmZmMwMDAwIGZmZmZmZmZmO2VyYSBmZmZjMDAwMCBmZmZmZmZmZjsiCVwKKwkJImNwLmIgMTAwMDAwIGZmZmMwMDAwIDQwMDAwOyIJCQkgICAgICAgIFwKKwkJInNldGVudiBmaWxlc2l6ZTtzYXZlZW52XDAiCQkJCVwKKwkidXBkPXJ1biBsb2FkO3J1biB1cGRhdGVcMCIJCQkJCVwKKwkiIgorI2RlZmluZSBDT05GSUdfQk9PVENPTU1BTkQJInJ1biBmbGFzaF9zZWxmIgorCisjZGVmaW5lIENPTkZJR19CT09UREVMQVkJNQkvKiBhdXRvYm9vdCBhZnRlciA1IHNlY29uZHMJKi8KKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorCisjZGVmaW5lIENPTkZJR19MT0FEU19FQ0hPCTEJLyogZWNobyBvbiBmb3Igc2VyaWFsIGRvd25sb2FkCSovCisjZGVmaW5lIENGR19MT0FEU19CQVVEX0NIQU5HRQkxCS8qIGFsbG93IGJhdWRyYXRlIGNoYW5nZQkqLworCisjZGVmaW5lIENPTkZJR19NSUkJCTEJLyogTUlJIFBIWSBtYW5hZ2VtZW50CQkqLworI2RlZmluZSBDT05GSUdfTkVUX01VTFRJCTEKKyNkZWZpbmUgQ09ORklHX1BIWV9BRERSCQkweDAyCS8qIGR1bW15IHNldHRpbmcsIG5vIEVNQUMwIHVzZWQJKi8KKyNkZWZpbmUgQ09ORklHX1BIWTFfQUREUgkweDAzCS8qIGR1bW15IHNldHRpbmcsIG5vIEVNQUMxIHVzZWQJKi8KKyNkZWZpbmUgQ09ORklHX1BIWTJfQUREUgkweDAwCS8qIHRlc3Qtb25seTogd2lsbCBiZSBjaGFuZ2VkCSovCisjZGVmaW5lIENPTkZJR19QSFkzX0FERFIJMHgwMQkvKiBQSFkgYWRkcmVzcyBmb3IgRU1BQzMJKi8KKyNkZWZpbmUgQ09ORklHX0hBU19FVEgwCisjZGVmaW5lIENPTkZJR19IQVNfRVRIMQorI2RlZmluZSBDT05GSUdfSEFTX0VUSDIKKyNkZWZpbmUgQ09ORklHX0hBU19FVEgzCisjZGVmaW5lIENPTkZJR19QSFlfUkVTRVQJMQkvKiByZXNldCBwaHkgdXBvbiBzdGFydHVwCSovCisjZGVmaW5lIENPTkZJR184OEUxMTExX0NMS19ERUxBWSAxCS8qIHNldCBDTEsgZGVsYXkgb24gQUxQUgkqLworI2RlZmluZSBDT05GSUdfUEhZX0dJR0UJCTEJLyogSW5jbHVkZSBHYkUgc3BlZWQvZHVwbGV4IGRldGVjdGlvbiAqLworI2RlZmluZSBDRkdfUlhfRVRIX0JVRkZFUgkzMgkvKiBOdW1iZXIgb2YgZXRoZXJuZXQgcnggYnVmZmVycyAmIGRlc2NyaXB0b3JzICovCisKKyNkZWZpbmUgQ09ORklHX05FVENPTlNPTEUJCS8qIGluY2x1ZGUgTmV0Q29uc29sZSBzdXBwb3J0CSovCisKKyNkZWZpbmUgQ09ORklHX0NPTU1BTkRTCSAgICAgICAoQ09ORklHX0NNRF9ERkwJfCBcCisJCQkJQ0ZHX0NNRF9BU0tFTlYJfCBcCisJCQkJQ0ZHX0NNRF9ESENQCXwgXAorCQkJCUNGR19DTURfRElBRwl8IFwKKwkJCQlDRkdfQ01EX0VFUFJPTQl8IFwKKwkJCQlDRkdfQ01EX0VMRgl8IFwKKwkJCQlDRkdfQ01EX0kyQwl8IFwKKwkJCQlDRkdfQ01EX0lSUQl8IFwKKwkJCQlDRkdfQ01EX01JSQl8IFwKKwkJCQlDRkdfQ01EX05FVAl8IFwKKwkJCQlDRkdfQ01EX05GUwl8IFwKKwkJCQlDRkdfQ01EX1BDSQl8IFwKKwkJCQlDRkdfQ01EX1BJTkcJfCBcCisJCQkJQ0ZHX0NNRF9GUEdBCXwgXAorCQkJCUNGR19DTURfTkFORAl8IFwKKwkJCQlDRkdfQ01EX1JFR0lORk8pCisKKy8qIHRoaXMgbXVzdCBiZSBpbmNsdWRlZCBBRlRFUiB0aGUgZGVmaW5pdGlvbiBvZiBDT05GSUdfQ09NTUFORFMgKGlmIGFueSkgKi8KKyNpbmNsdWRlIDxjbWRfY29uZmRlZnMuaD4KKworI3VuZGVmIENPTkZJR19XQVRDSERPRwkJCS8qIHdhdGNoZG9nIGRpc2FibGVkCQkqLworCisvKgorICogTWlzY2VsbGFuZW91cyBjb25maWd1cmFibGUgb3B0aW9ucworICovCisjZGVmaW5lIENGR19MT05HSEVMUAkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5CQkqLworI2RlZmluZSBDRkdfUFJPTVBUCSI9PiAiCQkvKiBNb25pdG9yIENvbW1hbmQgUHJvbXB0CSovCisjaWYgKENPTkZJR19DT01NQU5EUyAmIENGR19DTURfS0dEQikKKyNkZWZpbmUgQ0ZHX0NCU0laRQkxMDI0CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZQkqLworI2Vsc2UKKyNkZWZpbmUgQ0ZHX0NCU0laRQkyNTYJCS8qIENvbnNvbGUgSS9PIEJ1ZmZlciBTaXplCSovCisjZW5kaWYKKyNkZWZpbmUgQ0ZHX1BCU0laRSAoQ0ZHX0NCU0laRStzaXplb2YoQ0ZHX1BST01QVCkrMTYpIC8qIFByaW50IEJ1ZmZlciBTaXplICovCisjZGVmaW5lIENGR19NQVhBUkdTCTE2CQkvKiBtYXggbnVtYmVyIG9mIGNvbW1hbmQgYXJncwkqLworI2RlZmluZSBDRkdfQkFSR1NJWkUJQ0ZHX0NCU0laRQkvKiBCb290IEFyZ3VtZW50IEJ1ZmZlciBTaXplCSovCisKKyNkZWZpbmUgQ0ZHX01FTVRFU1RfU1RBUlQJMHgwNDAwMDAwCS8qIG1lbXRlc3Qgd29ya3Mgb24JKi8KKyNkZWZpbmUgQ0ZHX01FTVRFU1RfRU5ECQkweDBDMDAwMDAJLyogNCAuLi4gMTIgTUIgaW4gRFJBTQkqLworCisjZGVmaW5lIENGR19MT0FEX0FERFIJCTB4MTAwMDAwCS8qIGRlZmF1bHQgbG9hZCBhZGRyZXNzICovCisjZGVmaW5lIENGR19FWFRCRElORk8JCTEJLyogVG8gdXNlIGV4dGVuZGVkIGJvYXJkX2ludG8gKGJkX3QpICovCisKKyNkZWZpbmUgQ0ZHX0haCQkJMTAwMAkvKiBkZWNyZW1lbnRlciBmcmVxOiAxIG1zIHRpY2tzICovCisKKyNkZWZpbmUgQ09ORklHX0NNRExJTkVfRURJVElORwkxCS8qIGFkZCBjb21tYW5kIGxpbmUgaGlzdG9yeQkqLworI2RlZmluZSBDT05GSUdfTE9PUFcgICAgICAgICAgICAxICAgICAgIC8qIGVuYWJsZSBsb29wdyBjb21tYW5kICAgICAgICAgKi8KKyNkZWZpbmUgQ09ORklHX01YX0NZQ0xJQyAgICAgICAgMSAgICAgICAvKiBlbmFibGUgbWRjL213YyBjb21tYW5kcyAgICAgICovCisjZGVmaW5lIENPTkZJR19aRVJPX0JPT1RERUxBWV9DSEVDSwkvKiBjaGVjayBmb3Iga2V5cHJlc3Mgb24gYm9vdGRlbGF5PT0wICovCisjZGVmaW5lIENPTkZJR19WRVJTSU9OX1ZBUklBQkxFIDEJLyogaW5jbHVkZSB2ZXJzaW9uIGVudiB2YXJpYWJsZSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQQ0kgc3R1ZmYKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworLyogR2VuZXJhbCBQQ0kgKi8KKyNkZWZpbmUgQ09ORklHX1BDSQkJCS8qIGluY2x1ZGUgcGNpIHN1cHBvcnQJCSovCisjZGVmaW5lIENPTkZJR19QQ0lfUE5QCQkJLyogZG8gcGNpIHBsdWctYW5kLXBsYXkJCSovCisjZGVmaW5lIENPTkZJR19QQ0lfU0NBTl9TSE9XCQkvKiBzaG93IHBjaSBkZXZpY2VzIG9uIHN0YXJ0dXAJKi8KKyNkZWZpbmUgQ0ZHX1BDSV9UQVJHQkFTRSAgICAweDgwMDAwMDAwCS8qIFBDSWFkZHIgbWFwcGVkIHRvIENGR19QQ0lfTUVNQkFTRSAqLworI2RlZmluZSBDT05GSUdfUENJX0JPT1RERUxBWSAgICAwICAgICAgIC8qIGVuYWJsZSBwY2kgYm9vdGRlbGF5IHZhcmlhYmxlKi8KKworLyogQm9hcmQtc3BlY2lmaWMgUENJICovCisjZGVmaW5lIENGR19QQ0lfUFJFX0lOSVQJCS8qIGVuYWJsZSBib2FyZCBwY2lfcHJlX2luaXQoKQkqLworI2RlZmluZSBDRkdfUENJX1RBUkdFVF9JTklUCQkvKiBsZXQgYm9hcmQgaW5pdCBwY2kgdGFyZ2V0ICAgICovCisjZGVmaW5lIENGR19QQ0lfTUFTVEVSX0lOSVQKKworI2RlZmluZSBDRkdfUENJX1NVQlNZU19WRU5ET1JJRCAweDEwZTgJLyogQU1DQyAqLworI2RlZmluZSBDRkdfUENJX1NVQlNZU19ERVZJQ0VJRCAweGNhZmUJLyogV2hhdGV2ZXIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRlBHQSBzdHVmZgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIENPTkZJR19GUEdBICAgICAgICAgICAgIENGR19BTFRFUkFfQ1lDTE9OMgorI3VuZGVmIENGR19GUEdBX0NIRUNLX0NUUkxDCisjdW5kZWYgQ0ZHX0ZQR0FfUFJPR19GRUVEQkFDSworI2RlZmluZSBDT05GSUdfRlBHQV9DT1VOVCAgICAgICAxCQkvKiBJY2ggaGFiZSAyIC4uLiBhYmVyIGluCisJCQkJCVJlaWhlIGdlc2NoYWx0ZXQgLT4gc29sbHRlIGdlaGVuLAorCQkJCQlhdWZwYXNzZW4gbWl0IERhdGFzaXplIGlzdCBqZXR6dAorCQkJCQloYWx0IGRvcHBlbHQgc28gZ3Jvc3MgLi4uIFNlaXRlIDMwNgorCQkJCQlpc3QgZGFzIG1pdCBkZW4gbXVsdGlwbGUgRGV2aWNlIGluIFBTCisJCQkJCU1vZGUgZXJrbGFlcnQgLi4uKi8KKworLyogRlBHQSBwcm9ncmFtIHBpbiBjb25maWd1cmF0aW9uICovCisjZGVmaW5lIENGR19HUElPX0NMSwkJMTgJLyogRlBHQSBjbGsgcGluIChjcHUgb3V0cHV0KQkJKi8KKyNkZWZpbmUgQ0ZHX0dQSU9fREFUQQkJMTkJLyogRlBHQSBkYXRhIHBpbiAoY3B1IG91dHB1dCkJCSovCisjZGVmaW5lIENGR19HUElPX1NUQVRVUwkJMjAJLyogRlBHQSBzdGF0dXMgcGluIChjcHUgaW5wdXQpCQkqLworI2RlZmluZSBDRkdfR1BJT19DT05GSUcJCTIxCS8qIEZQR0EgQ09ORklHIHBpbiAoY3B1IG91dHB1dCkJCSovCisjZGVmaW5lIENGR19HUElPX0NPTl9ET04JMjIJLyogRlBHQSBDT05GSUdfRE9ORSBwaW4gKGNwdSBpbnB1dCkJKi8KKworI2RlZmluZSBDRkdfR1BJT19TRUxfRFBSCTE0CS8qIGNwdSBvdXRwdXQgKi8KKyNkZWZpbmUgQ0ZHX0dQSU9fU0VMX0FWUgkxNQkvKiBjcHUgb3V0cHV0ICovCisjZGVmaW5lIENGR19HUElPX1BST0dfRU4JMjMJLyogY3B1IG91dHB1dCAqLworCisvKgorICogTkFORC1GTEFTSCBzdHVmZgorICovCisjZGVmaW5lIENGR19NQVhfTkFORF9ERVZJQ0UJNAorI2RlZmluZSBOQU5EX01BWF9DSElQUwkJQ0ZHX01BWF9OQU5EX0RFVklDRQorI2RlZmluZSBDRkdfTkFORF9CQVNFCQkweEYwMDAwMDAwCS8qIE5BTkQgRkxBU0ggQmFzZSBBZGRyZXNzCSovCisjZGVmaW5lIENGR19OQU5EX0JBU0VfTElTVAl7IENGR19OQU5EX0JBU0UgKyAwLCBDRkdfTkFORF9CQVNFICsgMiwJXAorCQkJCSAgQ0ZHX05BTkRfQkFTRSArIDQsIENGR19OQU5EX0JBU0UgKyA2IH0KKyNkZWZpbmUgQ0ZHX05BTkRfUVVJRVRfVEVTVAkxCS8qIGRvbid0IHdhcm4gdXBvbiB1bmtub3duIE5BTkQgZmxhc2gJKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXh0ZXJuYWwgQnVzIENvbnRyb2xsZXIgKEVCQykgU2V0dXAKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIENGR19GTEFTSAkJQ0ZHX0ZMQVNIX0JBU0UKKworLyogTWVtb3J5IEJhbmsgMCAoRmxhc2ggQmFuayAwLCBOT1ItRkxBU0gpIGluaXRpYWxpemF0aW9uCQkJKi8KKyNkZWZpbmUgQ0ZHX0VCQ19QQjBBUAkJMHg5MjAxNTQ4MAorI2RlZmluZSBDRkdfRUJDX1BCMENSCQkoQ0ZHX0ZMQVNIIHwgMHgzQTAwMCkgLyogQlM9Mk1CLEJVPVIvVyxCVz0xNmJpdCAqLworCisvKiBNZW1vcnkgQmFuayAxIChOQU5ELUZMQVNIKSBpbml0aWFsaXphdGlvbgkJCQkJKi8KKyNkZWZpbmUgQ0ZHX0VCQ19QQjFBUAkJMHgwMTg0MDM4MAkvKiBUV1Q9MwkJCSovCisjZGVmaW5lIENGR19FQkNfUEIxQ1IJCShDRkdfTkFORF9CQVNFIHwgMHgxQTAwMCkgLyogQlM9MU1CLEJVPVIvVyxCVz0xNmJpdCAqLworCisvKgorICogRm9yIGJvb3RpbmcgTGludXgsIHRoZSBib2FyZCBpbmZvIGFuZCBjb21tYW5kIGxpbmUgZGF0YQorICogaGF2ZSB0byBiZSBpbiB0aGUgZmlyc3QgOCBNQiBvZiBtZW1vcnksIHNpbmNlIHRoaXMgaXMKKyAqIHRoZSBtYXhpbXVtIG1hcHBlZCBieSB0aGUgTGludXgga2VybmVsIGR1cmluZyBpbml0aWFsaXphdGlvbi4KKyAqLworI2RlZmluZSBDRkdfQk9PVE1BUFNaCQkoOCA8PCAyMCkJLyogSW5pdGlhbCBNZW1vcnkgbWFwIGZvciBMaW51eCAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ2FjaGUgQ29uZmlndXJhdGlvbgorICovCisjZGVmaW5lIENGR19EQ0FDSEVfU0laRQkJMzI3NjgJLyogRm9yIEFNQ0MgNDQwIENQVXMJCQkqLworI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUJMzIJLyogLi4uCQkJKi8KKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NISUZUCTUJLyogbG9nIGJhc2UgMiBvZiB0aGUgYWJvdmUgdmFsdWUJKi8KKyNlbmRpZgorCisvKgorICogSW50ZXJuYWwgRGVmaW5pdGlvbnMKKyAqCisgKiBCb290IEZsYWdzCisgKi8KKyNkZWZpbmUgQk9PVEZMQUdfQ09MRAkweDAxCQkvKiBOb3JtYWwgUG93ZXItT246IEJvb3QgZnJvbSBGTEFTSAkqLworI2RlZmluZSBCT09URkxBR19XQVJNCTB4MDIJCS8qIFNvZnR3YXJlIHJlYm9vdAkJCSovCisKKyNpZiAoQ09ORklHX0NPTU1BTkRTICYgQ0ZHX0NNRF9LR0RCKQorI2RlZmluZSBDT05GSUdfS0dEQl9CQVVEUkFURQkyMzA0MDAJLyogc3BlZWQgdG8gcnVuIGtnZGIgc2VyaWFsIHBvcnQgKi8KKyNkZWZpbmUgQ09ORklHX0tHREJfU0VSX0lOREVYCTIJLyogd2hpY2ggc2VyaWFsIHBvcnQgdG8gdXNlICovCisjZW5kaWYKKyNlbmRpZgkvKiBfX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MveWVsbG93c3RvbmUuaCBiL2luY2x1ZGUvY29uZmlncy95ZWxsb3dzdG9uZS5oCmluZGV4IGJhMjdmMzcuLjU4NzE3ZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY29uZmlncy95ZWxsb3dzdG9uZS5oCisrKyBiL2luY2x1ZGUvY29uZmlncy95ZWxsb3dzdG9uZS5oCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZpbmUgQ09ORklHX0JPQVJEX0VBUkxZX0lOSVRfRiAxICAgICAvKiBDYWxsIGJvYXJkX2Vhcmx5X2luaXRfZgkqLwogI2RlZmluZSBDT05GSUdfTUlTQ19JTklUX1IJMQkvKiBjYWxsIG1pc2NfaW5pdF9yKCkJCSovCisjZGVmaW5lIENPTkZJR19CT0FSRF9SRVNFVAkxCS8qIGNhbGwgYm9hcmRfcmVzZXQoKQkJKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQmFzZSBhZGRyZXNzZXMgLS0gTm90ZSB0aGVzZSBhcmUgZWZmZWN0aXZlIGFkZHJlc3NlcyB3aGVyZSB0aGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlncy95b3NlbWl0ZS5oIGIvaW5jbHVkZS9jb25maWdzL3lvc2VtaXRlLmgKaW5kZXggM2Q3YjRhMi4uNmU5NDJhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb25maWdzL3lvc2VtaXRlLmgKKysrIGIvaW5jbHVkZS9jb25maWdzL3lvc2VtaXRlLmgKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2RlZmluZSBDT05GSUdfQk9BUkRfRUFSTFlfSU5JVF9GIDEgICAgIC8qIENhbGwgYm9hcmRfZWFybHlfaW5pdF9mCSovCiAjZGVmaW5lIENPTkZJR19NSVNDX0lOSVRfUgkxCS8qIGNhbGwgbWlzY19pbml0X3IoKQkJKi8KKyNkZWZpbmUgQ09ORklHX0JPQVJEX1JFU0VUCTEJLyogY2FsbCBib2FyZF9yZXNldCgpCQkqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBCYXNlIGFkZHJlc3NlcyAtLSBOb3RlIHRoZXNlIGFyZSBlZmZlY3RpdmUgYWRkcmVzc2VzIHdoZXJlIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wcGM0NDAuaCBiL2luY2x1ZGUvcHBjNDQwLmgKaW5kZXggZTQwNzMyMC4uNDA3ZGFhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wcGM0NDAuaAorKysgYi9pbmNsdWRlL3BwYzQ0MC5oCkBAIC0zMTgzLDcgKzMxODMsNyBAQAogI2RlZmluZSBHUElPMAkJCTAKICNkZWZpbmUgR1BJTzEJCQkxCiAKLSNpZiBkZWZpbmVkKENPTkZJR180NDBHUCkKKyNpZiBkZWZpbmVkKENPTkZJR180NDBHUCkgfHwgZGVmaW5lZChDT05GSUdfNDQwR1gpCiAjZGVmaW5lIEdQSU8wX0JBU0UgICAgICAgICAgICAgKENGR19QRVJJUEhFUkFMX0JBU0UrMHgwMDAwMDcwMCkKIAogI2RlZmluZSBHUElPMF9PUiAgICAgICAgICAgICAgIChHUElPMF9CQVNFKzB4MCkK